@rubytech/create-maxy-code 0.1.24 → 0.1.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +81 -17
- package/package.json +1 -1
- package/payload/platform/plugins/.claude-plugin/marketplace.json +5 -95
- package/payload/platform/plugins/admin/PLUGIN.md +46 -23
- package/payload/platform/plugins/admin/skills/onboarding/SKILL.md +111 -126
- package/payload/platform/plugins/brochures/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/brochures/PLUGIN.md +36 -0
- package/payload/platform/plugins/brochures/commands/make-brochure.md +11 -0
- package/payload/platform/plugins/brochures/skills/a4-print-documents/SKILL.md +478 -0
- package/payload/platform/plugins/brochures/skills/brand-design/SKILL.md +192 -0
- package/payload/platform/plugins/brochures/skills/make-brochure/SKILL.md +354 -0
- package/payload/platform/plugins/brochures/skills/make-brochure/references/seller-brief-template.md +115 -0
- package/payload/platform/plugins/brochures/skills/property-brochure/SKILL.md +119 -0
- package/payload/platform/plugins/brochures/skills/property-brochure/references/build.md +270 -0
- package/payload/platform/plugins/brochures/skills/property-brochure/references/copy.md +211 -0
- package/payload/platform/plugins/brochures/skills/property-brochure/references/images.md +166 -0
- package/payload/platform/plugins/brochures/skills/property-brochure/references/index-landing.md +376 -0
- package/payload/platform/plugins/brochures/skills/property-brochure/references/index.html +1288 -0
- package/payload/platform/plugins/brochures/skills/property-brochure/references/placeholders.md +250 -0
- package/payload/platform/plugins/brochures/skills/property-brochure/references/registers.md +47 -0
- package/payload/platform/plugins/brochures/skills/property-brochure/references/seller-brief.md +56 -0
- package/payload/platform/plugins/brochures/skills/property-brochure/references/structure.md +249 -0
- package/payload/platform/plugins/brochures/skills/property-brochure/references/template.html +2370 -0
- package/payload/platform/plugins/brochures/skills/property-extract/SKILL.md +372 -0
- package/payload/platform/plugins/buyers/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/buyers/PLUGIN.md +35 -0
- package/payload/platform/plugins/buyers/skills/buyer-feedback/SKILL.md +109 -0
- package/payload/platform/plugins/buyers/skills/buyer-management/SKILL.md +42 -0
- package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-qualification-questions.md +16 -0
- package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-qualification.md +59 -0
- package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-scripts.md +63 -0
- package/payload/platform/plugins/buyers/skills/buyer-management/references/buyer-working-scripts.md +54 -0
- package/payload/platform/plugins/buyers/skills/buyer-management/references/feedback-collection.md +42 -0
- package/payload/platform/plugins/buyers/skills/buyer-management/references/offer-capture.md +38 -0
- package/payload/platform/plugins/buyers/skills/buyer-management/references/viewing-booking.md +32 -0
- package/payload/platform/plugins/buyers/skills/buyer-management/references/viewing-management.md +52 -0
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/SKILL.md +407 -0
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/care-fees-guide.md +68 -0
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/divorce-sales-guide.md +61 -0
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/downsizing-guide.md +45 -0
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/first-time-buyers.md +92 -0
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/first-time-sellers.md +78 -0
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/probate-guide.md +53 -0
- package/payload/platform/plugins/buyers/skills/buyer-seller-guides/references/upsizing-guide.md +41 -0
- package/payload/platform/plugins/buyers/skills/property-enquiry/SKILL.md +126 -0
- package/payload/platform/plugins/buyers/skills/viewing-management/SKILL.md +111 -0
- package/payload/platform/plugins/cloudflare/references/dashboard-guide.md +37 -0
- package/payload/platform/plugins/cloudflare/references/manual-setup.md +81 -1
- package/payload/platform/plugins/cloudflare/scripts/__tests__/tunnel-ingress.test.ts +241 -0
- package/payload/platform/plugins/cloudflare/scripts/setup-tunnel.sh +267 -28
- package/payload/platform/plugins/cloudflare/scripts/tunnel-ingress.ts +291 -0
- package/payload/platform/plugins/cloudflare/skills/setup-tunnel/SKILL.md +42 -0
- package/payload/platform/plugins/contacts/PLUGIN.md +18 -9
- package/payload/platform/plugins/docs/references/platform.md +2 -0
- package/payload/platform/plugins/docs/references/troubleshooting.md +12 -0
- package/payload/platform/plugins/email/PLUGIN.md +18 -9
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.d.ts +17 -0
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.d.ts.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js +185 -0
- package/payload/platform/plugins/email/mcp/dist/lib/claude-bridge.js.map +1 -0
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js +34 -111
- package/payload/platform/plugins/email/mcp/dist/scripts/email-auto-respond.js.map +1 -1
- package/payload/platform/plugins/estate-business/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/estate-business/PLUGIN.md +65 -0
- package/payload/platform/plugins/estate-business/skills/business-growth/SKILL.md +133 -0
- package/payload/platform/plugins/estate-business/skills/business-growth/references/buy-back-your-time.md +37 -0
- package/payload/platform/plugins/estate-business/skills/business-growth/references/firewave-gost-scorecards.md +14 -0
- package/payload/platform/plugins/estate-business/skills/business-growth/references/keller-org-model.md +17 -0
- package/payload/platform/plugins/estate-business/skills/business-growth/references/lencioni-team-models.md +22 -0
- package/payload/platform/plugins/estate-business/skills/business-growth/references/listing-management-system.md +11 -0
- package/payload/platform/plugins/estate-business/skills/business-growth/references/net-figure-form.md +11 -0
- package/payload/platform/plugins/estate-business/skills/business-growth/references/serhant-bizinbox-notes.md +13 -0
- package/payload/platform/plugins/estate-business/skills/business-growth/references/team-roles-commission.md +14 -0
- package/payload/platform/plugins/estate-business/skills/business-growth/references/va-2026-ops.md +43 -0
- package/payload/platform/plugins/estate-business/skills/business-growth/references/wingman-structure.md +13 -0
- package/payload/platform/plugins/estate-business/skills/business-operations/SKILL.md +32 -0
- package/payload/platform/plugins/estate-business/skills/business-operations/references/crm-systems.md +57 -0
- package/payload/platform/plugins/estate-business/skills/business-operations/references/hiring-guide.md +59 -0
- package/payload/platform/plugins/estate-business/skills/business-operations/references/impact-framework.md +47 -0
- package/payload/platform/plugins/estate-business/skills/business-operations/references/minutes-equal-money.md +55 -0
- package/payload/platform/plugins/estate-business/skills/business-operations/references/team-management.md +48 -0
- package/payload/platform/plugins/estate-business/skills/commission-calculator/SKILL.md +40 -0
- package/payload/platform/plugins/estate-business/skills/exp-partnership/SKILL.md +52 -0
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/12-reasons.md +39 -0
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/95-5-system.md +66 -0
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/agent-attraction-scripts.md +90 -0
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/business-partnership.md +92 -0
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/exp-model-overview.md +66 -0
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/model-comparison.md +66 -0
- package/payload/platform/plugins/estate-business/skills/exp-partnership/references/revenue-share-explained.md +57 -0
- package/payload/platform/plugins/estate-business/skills/month-end-close/SKILL.md +69 -0
- package/payload/platform/plugins/estate-business/skills/payment-batch-stager/SKILL.md +42 -0
- package/payload/platform/plugins/estate-business/skills/period-reconciler/SKILL.md +42 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/SKILL.md +117 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/attraction-agent-notes.md +31 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/attraction-agent.md +58 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/authenticity-boundaries.md +28 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/become-a-brand-leader-notes.md +19 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/blast-formula.md +42 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/brand-leader.md +48 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/brand-strategy-system.md +59 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/content-engine.md +49 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/firewave-blast-and-blogging.md +23 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/gary-v-content.md +52 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/gary-v-principles.md +20 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/oversubscribed-positioning.md +18 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/platforms.md +41 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/priestley-oversubscribed.md +54 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/storeys-style-examples.md +25 -0
- package/payload/platform/plugins/estate-business/skills/personal-branding/references/visual-identity.md +27 -0
- package/payload/platform/plugins/estate-coaching/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/estate-coaching/PLUGIN.md +55 -0
- package/payload/platform/plugins/estate-coaching/skills/agent-performance/SKILL.md +371 -0
- package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/atomic-habits.md +52 -0
- package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/daily-routine-scorecard.md +104 -0
- package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/hp6-model.md +63 -0
- package/payload/platform/plugins/estate-coaching/skills/agent-performance/references/twelve-week-year.md +71 -0
- package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/SKILL.md +36 -0
- package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/coaching-boundaries.md +56 -0
- package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/feedback-framework.md +61 -0
- package/payload/platform/plugins/estate-coaching/skills/bespoke-coaching/references/performance-framework.md +109 -0
- package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/SKILL.md +421 -0
- package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/coaching-exercises.md +86 -0
- package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/goal-setting.md +78 -0
- package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/one-to-one-framework.md +92 -0
- package/payload/platform/plugins/estate-coaching/skills/coaching-toolkit/references/soi-workbook.md +103 -0
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/SKILL.md +410 -0
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/agent-training-guide.md +70 -0
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/business-in-a-box.md +72 -0
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/buyers-guide.md +53 -0
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/codo-method.md +72 -0
- package/payload/platform/plugins/estate-coaching/skills/serhant-training/references/website-planning-guide.md +79 -0
- package/payload/platform/plugins/estate-onboarding/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/estate-onboarding/PLUGIN.md +31 -0
- package/payload/platform/plugins/estate-onboarding/skills/bootstrap/SKILL.md +26 -0
- package/payload/platform/plugins/estate-onboarding/skills/bootstrap/references/onboarding-flow.md +63 -0
- package/payload/platform/plugins/estate-sales/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/estate-sales/PLUGIN.md +53 -0
- package/payload/platform/plugins/estate-sales/skills/chase-progression/SKILL.md +107 -0
- package/payload/platform/plugins/estate-sales/skills/negotiation/SKILL.md +35 -0
- package/payload/platform/plugins/estate-sales/skills/negotiation/references/deal-saving.md +47 -0
- package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-deep-guide.md +64 -0
- package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-prep-principles.md +29 -0
- package/payload/platform/plugins/estate-sales/skills/negotiation/references/negotiation-techniques.md +42 -0
- package/payload/platform/plugins/estate-sales/skills/negotiation/references/offer-presentation.md +43 -0
- package/payload/platform/plugins/estate-sales/skills/risk-scorer/SKILL.md +42 -0
- package/payload/platform/plugins/estate-sales/skills/sales-closer/SKILL.md +24 -0
- package/payload/platform/plugins/estate-sales/skills/sales-closer/references/serhant-emotion-stages.md +36 -0
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/SKILL.md +30 -0
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/chris-voss-discovery.md +88 -0
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/firewave-gost-journey.md +68 -0
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/phil-jones-openers.md +78 -0
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/pre-listing-checklist.md +77 -0
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/serhant-improv.md +22 -0
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/tom-ferry-discovery.md +103 -0
- package/payload/platform/plugins/estate-sales/skills/sales-discovery/references/vendor-motivation-competitor.md +52 -0
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/SKILL.md +29 -0
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/chris-voss-negotiation.md +70 -0
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/phil-jones-price-words.md +40 -0
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/serhant-negotiation-plus.md +55 -0
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/tom-panos-commission-pricing.md +57 -0
- package/payload/platform/plugins/estate-sales/skills/sales-negotiation/references/tony-morris-questioning.md +54 -0
- package/payload/platform/plugins/estate-sales/skills/sales-progression/SKILL.md +27 -0
- package/payload/platform/plugins/estate-sales/skills/sales-progression/references/conveyancing-guide.md +54 -0
- package/payload/platform/plugins/estate-sales/skills/sales-progression/references/transaction-tracking.md +66 -0
- package/payload/platform/plugins/estate-teaching/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/estate-teaching/PLUGIN.md +31 -0
- package/payload/platform/plugins/estate-teaching/skills/content-directory/SKILL.md +39 -0
- package/payload/platform/plugins/estate-teaching/skills/content-directory/references/module-delivery.md +65 -0
- package/payload/platform/plugins/estate-teaching/skills/content-directory/references/progress-tracking.md +47 -0
- package/payload/platform/plugins/leads/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/leads/PLUGIN.md +62 -0
- package/payload/platform/plugins/leads/skills/chain-progression-tracker/SKILL.md +51 -0
- package/payload/platform/plugins/leads/skills/diary-builder/SKILL.md +38 -0
- package/payload/platform/plugins/leads/skills/enquiry-triage/SKILL.md +36 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/SKILL.md +137 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/buyer-search-letter.md +28 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/buyer-search-letters.md +37 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/database-reactivation.md +30 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/email-nurture-sequences.md +45 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/facebook-referrals.md +30 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/firewave-email-nurture-sequences.md +41 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/keller-33-touch.md +34 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/neighbour-letters.md +31 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/neighbour-notification-letter.md +20 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/ofi-follow-up-dialogue.md +22 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/ofi-follow-up.md +26 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/serhant-three-fs-plus.md +21 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/sharran-10x10x10.md +18 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/sms-templates.md +40 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/sphere-of-influence-notes.md +34 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/sphere-of-influence.md +60 -0
- package/payload/platform/plugins/leads/skills/lead-nurturing/references/tom-panos-sms-templates.md +59 -0
- package/payload/platform/plugins/leads/skills/morning-round/SKILL.md +72 -0
- package/payload/platform/plugins/leads/skills/prospecting/SKILL.md +33 -0
- package/payload/platform/plugins/leads/skills/prospecting/references/database-matching.md +30 -0
- package/payload/platform/plugins/leads/skills/prospecting/references/database-value.md +53 -0
- package/payload/platform/plugins/leads/skills/prospecting/references/prospecting-dialogues.md +24 -0
- package/payload/platform/plugins/leads/skills/prospecting/references/reactivation.md +34 -0
- package/payload/platform/plugins/listings/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/listings/PLUGIN.md +103 -0
- package/payload/platform/plugins/listings/skills/comparable-finder/SKILL.md +52 -0
- package/payload/platform/plugins/listings/skills/epc-checker/SKILL.md +38 -0
- package/payload/platform/plugins/listings/skills/home-preparation/SKILL.md +28 -0
- package/payload/platform/plugins/listings/skills/home-preparation/references/kerb-appeal.md +38 -0
- package/payload/platform/plugins/listings/skills/home-preparation/references/photo-day.md +59 -0
- package/payload/platform/plugins/listings/skills/home-preparation/references/situational-tips.md +50 -0
- package/payload/platform/plugins/listings/skills/home-preparation/references/staging-guide.md +52 -0
- package/payload/platform/plugins/listings/skills/listing-copy-writer/SKILL.md +55 -0
- package/payload/platform/plugins/listings/skills/listing-presentation/SKILL.md +286 -0
- package/payload/platform/plugins/listings/skills/listing-presentation/references/booking-script.md +51 -0
- package/payload/platform/plugins/listings/skills/listing-presentation/references/objection-scripts.md +193 -0
- package/payload/platform/plugins/listings/skills/listing-presentation/references/penhaul-presentation.md +123 -0
- package/payload/platform/plugins/listings/skills/listing-presentation/references/pre-listing-kit.md +139 -0
- package/payload/platform/plugins/listings/skills/listing-presentation/references/set-to-sell.md +55 -0
- package/payload/platform/plugins/listings/skills/listing-presentation/references/sharran-frameworks.md +107 -0
- package/payload/platform/plugins/listings/skills/local-market-stats/SKILL.md +33 -0
- package/payload/platform/plugins/listings/skills/new-instruction/SKILL.md +78 -0
- package/payload/platform/plugins/listings/skills/particulars-builder/SKILL.md +48 -0
- package/payload/platform/plugins/listings/skills/portal-launch-scheduler/SKILL.md +49 -0
- package/payload/platform/plugins/listings/skills/pricing-scenario-builder/SKILL.md +35 -0
- package/payload/platform/plugins/listings/skills/property-marketing/SKILL.md +337 -0
- package/payload/platform/plugins/listings/skills/property-marketing/references/auction-report-template.md +41 -0
- package/payload/platform/plugins/listings/skills/property-marketing/references/coming-soon-campaign.md +43 -0
- package/payload/platform/plugins/listings/skills/property-marketing/references/direct-mail-templates.md +121 -0
- package/payload/platform/plugins/listings/skills/property-marketing/references/eoi-form-template.md +62 -0
- package/payload/platform/plugins/listings/skills/property-marketing/references/monthly-scorecard.md +63 -0
- package/payload/platform/plugins/listings/skills/supplier-booker/SKILL.md +39 -0
- package/payload/platform/plugins/listings/skills/talk-track-composer/SKILL.md +36 -0
- package/payload/platform/plugins/listings/skills/terms-of-business-drafter/SKILL.md +54 -0
- package/payload/platform/plugins/listings/skills/valuation-prep/SKILL.md +69 -0
- package/payload/platform/plugins/loop/.claude-plugin/plugin.json +17 -0
- package/payload/platform/plugins/loop/PLUGIN.md +108 -0
- package/payload/platform/plugins/loop/mcp/dist/index.d.ts +2 -0
- package/payload/platform/plugins/loop/mcp/dist/index.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/index.js +293 -0
- package/payload/platform/plugins/loop/mcp/dist/index.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/crypto.d.ts +10 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/crypto.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/crypto.js +88 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/crypto.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.d.ts +82 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.js +427 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/loop-api.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.d.ts +5 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js +40 -0
- package/payload/platform/plugins/loop/mcp/dist/lib/neo4j.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.d.ts +10 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.js +24 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/customer-preferences.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/feedback.d.ts +16 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/feedback.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/feedback.js +35 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/feedback.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.d.ts +5 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.js +19 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-deregister.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-list.d.ts +4 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-list.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-list.js +14 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-list.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-register.d.ts +9 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-register.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-register.js +60 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/key-register.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts +13 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.js +41 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-enquiry.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts +9 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.js +16 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-batch.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts +15 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.js +11 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match-request.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.d.ts +10 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.js +39 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/marketing-match.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.d.ts +9 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.js +125 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/people-detail.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/people-search.d.ts +18 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/people-search.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/people-search.js +87 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/people-search.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.d.ts +10 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.js +82 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-detail.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.d.ts +12 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.js +32 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-listed.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-request.d.ts +15 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-request.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-request.js +11 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-request.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-search.d.ts +16 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-search.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-search.js +41 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/property-search.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/supplier.d.ts +13 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/supplier.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/supplier.js +49 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/supplier.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.d.ts +7 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.js +19 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/team-availability.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/team-info.d.ts +5 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/team-info.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/team-info.js +32 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/team-info.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.d.ts +14 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.js +11 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-create.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.d.ts +9 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.js +85 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-detail.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.d.ts +13 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.js +44 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-search.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.d.ts +14 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.d.ts.map +1 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.js +18 -0
- package/payload/platform/plugins/loop/mcp/dist/tools/viewing-update.js.map +1 -0
- package/payload/platform/plugins/loop/mcp/package-lock.json +2549 -0
- package/payload/platform/plugins/loop/mcp/package.json +21 -0
- package/payload/platform/plugins/loop/mcp/src/__tests__/loop-swagger.snapshot.json +26467 -0
- package/payload/platform/plugins/loop/mcp/src/__tests__/swagger-write-coverage.test.ts +153 -0
- package/payload/platform/plugins/loop/mcp/src/index.ts +444 -0
- package/payload/platform/plugins/loop/mcp/src/lib/crypto.ts +105 -0
- package/payload/platform/plugins/loop/mcp/src/lib/loop-api.ts +604 -0
- package/payload/platform/plugins/loop/mcp/src/lib/neo4j.ts +51 -0
- package/payload/platform/plugins/loop/mcp/src/tools/customer-preferences.ts +66 -0
- package/payload/platform/plugins/loop/mcp/src/tools/feedback.ts +86 -0
- package/payload/platform/plugins/loop/mcp/src/tools/key-deregister.ts +27 -0
- package/payload/platform/plugins/loop/mcp/src/tools/key-list.ts +19 -0
- package/payload/platform/plugins/loop/mcp/src/tools/key-register.ts +95 -0
- package/payload/platform/plugins/loop/mcp/src/tools/marketing-enquiry.ts +113 -0
- package/payload/platform/plugins/loop/mcp/src/tools/marketing-match-batch.ts +53 -0
- package/payload/platform/plugins/loop/mcp/src/tools/marketing-match-request.ts +42 -0
- package/payload/platform/plugins/loop/mcp/src/tools/marketing-match.ts +84 -0
- package/payload/platform/plugins/loop/mcp/src/tools/people-detail.ts +245 -0
- package/payload/platform/plugins/loop/mcp/src/tools/people-search.ts +180 -0
- package/payload/platform/plugins/loop/mcp/src/tools/property-detail.ts +145 -0
- package/payload/platform/plugins/loop/mcp/src/tools/property-listed.ts +88 -0
- package/payload/platform/plugins/loop/mcp/src/tools/property-request.ts +42 -0
- package/payload/platform/plugins/loop/mcp/src/tools/property-search.ts +92 -0
- package/payload/platform/plugins/loop/mcp/src/tools/supplier.ts +129 -0
- package/payload/platform/plugins/loop/mcp/src/tools/team-availability.ts +52 -0
- package/payload/platform/plugins/loop/mcp/src/tools/team-info.ts +95 -0
- package/payload/platform/plugins/loop/mcp/src/tools/viewing-create.ts +41 -0
- package/payload/platform/plugins/loop/mcp/src/tools/viewing-detail.ts +171 -0
- package/payload/platform/plugins/loop/mcp/src/tools/viewing-search.ts +92 -0
- package/payload/platform/plugins/loop/mcp/src/tools/viewing-update.ts +53 -0
- package/payload/platform/plugins/loop/mcp/tsconfig.json +20 -0
- package/payload/platform/plugins/loop/mcp/vitest.config.ts +9 -0
- package/payload/platform/plugins/loop/skills/compliance-flag-checker/SKILL.md +53 -0
- package/payload/platform/plugins/loop/skills/priority-ranker/SKILL.md +40 -0
- package/payload/platform/plugins/loop/skills/tone-matched-drafter/SKILL.md +53 -0
- package/payload/platform/plugins/loop/skills/variance-narrator/SKILL.md +50 -0
- package/payload/platform/plugins/loop/skills/vendor-research/SKILL.md +54 -0
- package/payload/platform/plugins/memory/PLUGIN.md +58 -29
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.d.ts +3 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js +105 -4
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-read.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js +16 -3
- package/payload/platform/plugins/memory/mcp/dist/tools/profile-update.js.map +1 -1
- package/payload/platform/plugins/outlook/PLUGIN.md +14 -7
- package/payload/platform/plugins/replicate/PLUGIN.md +6 -3
- package/payload/platform/plugins/scheduling/PLUGIN.md +16 -8
- package/payload/platform/plugins/tasks/PLUGIN.md +28 -14
- package/payload/platform/plugins/teaching/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/teaching/PLUGIN.md +57 -0
- package/payload/platform/plugins/teaching/skills/interactive-tutor/SKILL.md +59 -0
- package/payload/platform/plugins/teaching/skills/interactive-tutor/references/assessment.md +70 -0
- package/payload/platform/plugins/teaching/skills/interactive-tutor/references/classroom-conduct.md +43 -0
- package/payload/platform/plugins/teaching/skills/interactive-tutor/references/teaching-modes.md +83 -0
- package/payload/platform/plugins/teaching/skills/lesson-planner/SKILL.md +48 -0
- package/payload/platform/plugins/teaching/skills/lesson-planner/references/context-gathering.md +41 -0
- package/payload/platform/plugins/teaching/skills/lesson-planner/references/plan-structure.md +94 -0
- package/payload/platform/plugins/teaching/skills/study-pack-builder/SKILL.md +52 -0
- package/payload/platform/plugins/teaching/skills/study-pack-builder/references/disaggregation.md +49 -0
- package/payload/platform/plugins/teaching/skills/study-pack-builder/references/materials.md +116 -0
- package/payload/platform/plugins/telegram/PLUGIN.md +6 -3
- package/payload/platform/plugins/vendors/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/vendors/PLUGIN.md +34 -0
- package/payload/platform/plugins/vendors/skills/vendor-communication/SKILL.md +42 -0
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/fee-protection-and-agenda.md +28 -0
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/listing-scripts.md +44 -0
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/negotiation-deep-guide.md +70 -0
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/price-alignment-scripts.md +33 -0
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/price-alignment.md +34 -0
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/scenario-scripts.md +38 -0
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/seller-engagement.md +51 -0
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/valuation-booking.md +76 -0
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/vendor-scripts.md +63 -0
- package/payload/platform/plugins/vendors/skills/vendor-communication/references/vendor-updates.md +41 -0
- package/payload/platform/plugins/vendors/skills/vendor-updates/SKILL.md +153 -0
- package/payload/platform/plugins/waitlist/PLUGIN.md +12 -6
- package/payload/platform/plugins/whatsapp/PLUGIN.md +25 -13
- package/payload/platform/plugins/workflows/PLUGIN.md +16 -8
- package/payload/platform/plugins/writer-craft/.claude-plugin/plugin.json +8 -0
- package/payload/platform/plugins/writer-craft/PLUGIN.md +87 -0
- package/payload/platform/plugins/writer-craft/agents/writer-craft--manuscript-reviewer.md +92 -0
- package/payload/platform/plugins/writer-craft/skills/citation-style/SKILL.md +94 -0
- package/payload/platform/plugins/writer-craft/skills/citation-style/references/book-and-chapter-models.md +77 -0
- package/payload/platform/plugins/writer-craft/skills/citation-style/references/citation-rules.md +103 -0
- package/payload/platform/plugins/writer-craft/skills/citation-style/references/journal-article-models.md +74 -0
- package/payload/platform/plugins/writer-craft/skills/citation-style/references/other-source-models.md +146 -0
- package/payload/platform/plugins/writer-craft/skills/citation-style/references/reference-list-rules.md +70 -0
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/SKILL.md +108 -0
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/copyediting.md +73 -0
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/developmental-editing.md +85 -0
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/genre-specific-editing.md +78 -0
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/line-editing.md +55 -0
- package/payload/platform/plugins/writer-craft/skills/editorial-practice/references/self-editing.md +89 -0
- package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/SKILL.md +114 -0
- package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/audience-analysis.md +73 -0
- package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/crafting-persuasive-story.md +76 -0
- package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/persuasion-case-studies.md +67 -0
- package/payload/platform/plugins/writer-craft/skills/persuasive-storytelling/references/transformation-framework.md +86 -0
- package/payload/platform/plugins/writer-craft/skills/point-of-view/SKILL.md +97 -0
- package/payload/platform/plugins/writer-craft/skills/point-of-view/references/indirect-narration.md +72 -0
- package/payload/platform/plugins/writer-craft/skills/point-of-view/references/pov-types-and-voice.md +91 -0
- package/payload/platform/plugins/writer-craft/skills/point-of-view/references/protagonist-filter.md +71 -0
- package/payload/platform/plugins/writer-craft/skills/point-of-view/references/tense-and-person.md +85 -0
- package/payload/platform/plugins/writer-craft/skills/prose-craft/SKILL.md +100 -0
- package/payload/platform/plugins/writer-craft/skills/prose-craft/references/punctuation-and-grammar.md +72 -0
- package/payload/platform/plugins/writer-craft/skills/prose-craft/references/repetition.md +71 -0
- package/payload/platform/plugins/writer-craft/skills/prose-craft/references/sound-and-rhythm.md +64 -0
- package/payload/platform/plugins/writer-craft/skills/prose-craft/references/word-economy.md +93 -0
- package/payload/platform/plugins/writer-craft/skills/reader-engagement/SKILL.md +100 -0
- package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/cause-effect-setup-payoff.md +79 -0
- package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/conflict-escalation.md +81 -0
- package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/hooking-readers.md +67 -0
- package/payload/platform/plugins/writer-craft/skills/reader-engagement/references/neurochemistry-of-engagement.md +94 -0
- package/payload/platform/plugins/writer-craft/skills/review-manuscript/SKILL.md +111 -0
- package/payload/platform/plugins/writer-craft/skills/review-manuscript/references/review-manuscript-checklist.md +119 -0
- package/payload/platform/plugins/writer-craft/skills/review-prose/SKILL.md +99 -0
- package/payload/platform/plugins/writer-craft/skills/review-prose/references/prose-review-checklist.md +112 -0
- package/payload/platform/plugins/writer-craft/skills/review-scene/SKILL.md +99 -0
- package/payload/platform/plugins/writer-craft/skills/review-scene/references/scene-analysis-framework.md +95 -0
- package/payload/platform/plugins/writer-craft/skills/story-architecture/SKILL.md +106 -0
- package/payload/platform/plugins/writer-craft/skills/story-architecture/references/blueprinting-and-scene-cards.md +118 -0
- package/payload/platform/plugins/writer-craft/skills/story-architecture/references/inner-issue-and-protagonist-goal.md +66 -0
- package/payload/platform/plugins/writer-craft/skills/story-architecture/references/misbelief-desire-worldview.md +87 -0
- package/payload/platform/plugins/writer-craft/skills/story-architecture/references/origin-scenes-and-escalation.md +82 -0
- package/payload/platform/plugins/writer-craft/skills/story-blueprint/SKILL.md +133 -0
- package/payload/platform/plugins/writer-craft/skills/story-blueprint/references/blueprinting-exercises.md +118 -0
- package/payload/platform/plugins/writer-craft/skills/story-blueprint/references/blueprinting-process.md +128 -0
- package/payload/platform/scripts/conversation-id-allowlist.txt +0 -1
- package/payload/platform/services/claude-session-manager/dist/config.d.ts +6 -0
- package/payload/platform/services/claude-session-manager/dist/config.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/config.js +60 -1
- package/payload/platform/services/claude-session-manager/dist/config.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +9 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +48 -2
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/index.js +39 -0
- package/payload/platform/services/claude-session-manager/dist/index.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts +22 -0
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js +32 -1
- package/payload/platform/services/claude-session-manager/dist/pty-spawner.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/public-tool-audit.d.ts +33 -0
- package/payload/platform/services/claude-session-manager/dist/public-tool-audit.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js +149 -0
- package/payload/platform/services/claude-session-manager/dist/public-tool-audit.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.d.ts +28 -0
- package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js +77 -0
- package/payload/platform/services/claude-session-manager/dist/spawn-rate-limiter.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts +25 -0
- package/payload/platform/services/claude-session-manager/dist/tool-surface.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js +149 -0
- package/payload/platform/services/claude-session-manager/dist/tool-surface.js.map +1 -0
- package/payload/premium-plugins/real-agency/plugins/estate-business/PLUGIN.md +15 -0
- package/payload/premium-plugins/real-agency/plugins/estate-sales/PLUGIN.md +5 -0
- package/payload/premium-plugins/real-agency/plugins/leads/PLUGIN.md +16 -0
- package/payload/premium-plugins/real-agency/plugins/listings/PLUGIN.md +39 -0
- package/payload/premium-plugins/real-agency/plugins/loop/PLUGIN.md +15 -0
- package/payload/server/{chunk-2ZNKHCQB.js → chunk-2MRZBQMH.js} +1 -1
- package/payload/server/{chunk-GPUCA2RQ.js → chunk-NL7QLVAD.js} +0 -192
- package/payload/server/{chunk-IDKWGLM5.js → chunk-YPZFYTYP.js} +1 -247
- package/payload/server/{cloudflare-task-tracker-LYI5BTYI.js → cloudflare-task-tracker-QVOGHKWV.js} +2 -2
- package/payload/server/maxy-edge.js +2 -2
- package/payload/server/package.json +0 -2
- package/payload/server/public/assets/{Checkbox-D1OQD43b.js → Checkbox-YIF0payo.js} +1 -1
- package/payload/server/public/assets/{admin-czNBxWor.js → admin-DW8IJcLc.js} +1 -1
- package/payload/server/public/assets/{architectureDiagram-Q4EWVU46-BcwgT80u.js → architectureDiagram-Q4EWVU46-Bz8mlxZZ.js} +1 -1
- package/payload/server/public/assets/{blockDiagram-DXYQGD6D-BMSyZUQA.js → blockDiagram-DXYQGD6D-DwV8Z8-i.js} +1 -1
- package/payload/server/public/assets/{brand-2cku8WFs.css → brand-DqiRNMlu.css} +1 -1
- package/payload/server/public/assets/{c4Diagram-AHTNJAMY-DPRGY1jJ.js → c4Diagram-AHTNJAMY-DiUTejMp.js} +1 -1
- package/payload/server/public/assets/channel-PtVtoBEL.js +1 -0
- package/payload/server/public/assets/{chunk-336JU56O-B7oQ3g1c.js → chunk-336JU56O-4mHZpBXe.js} +2 -2
- package/payload/server/public/assets/{chunk-426QAEUC-C1P0yFXw.js → chunk-426QAEUC-Cbv0vrN9.js} +1 -1
- package/payload/server/public/assets/{chunk-4TB4RGXK-LI7kOJd0.js → chunk-4TB4RGXK-BvLhId_2.js} +1 -1
- package/payload/server/public/assets/{chunk-5FUZZQ4R-CXQRGTQE.js → chunk-5FUZZQ4R-bBafOTkw.js} +1 -1
- package/payload/server/public/assets/{chunk-5PVQY5BW-NSyzpXRy.js → chunk-5PVQY5BW-B0NqBKVy.js} +1 -1
- package/payload/server/public/assets/{chunk-EDXVE4YY-voNwxbDs.js → chunk-EDXVE4YY-CFd4SqI6.js} +1 -1
- package/payload/server/public/assets/{chunk-ENJZ2VHE-CMEMPzYY.js → chunk-ENJZ2VHE-ajf2sb6c.js} +1 -1
- package/payload/server/public/assets/{chunk-ICPOFSXX-hEbwu-pe.js → chunk-ICPOFSXX-pWg6bug7.js} +1 -1
- package/payload/server/public/assets/{chunk-OYMX7WX6-DxskDrLs.js → chunk-OYMX7WX6-OjEd-17c.js} +1 -1
- package/payload/server/public/assets/{chunk-U2HBQHQK-D7TKgUo0.js → chunk-U2HBQHQK-DbEFSPoh.js} +1 -1
- package/payload/server/public/assets/{chunk-X2U36JSP-BvPUQEPm.js → chunk-X2U36JSP-COdNwrBb.js} +1 -1
- package/payload/server/public/assets/{chunk-YZCP3GAM-BY-RWQUW.js → chunk-YZCP3GAM-CHMWuY9B.js} +1 -1
- package/payload/server/public/assets/{chunk-ZZ45TVLE-DZvOYDY6.js → chunk-ZZ45TVLE-B-uDLQOB.js} +1 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-RVH_SEhY.js +1 -0
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-Cm3rAb93.js +1 -0
- package/payload/server/public/assets/clone-BjY0Wzht.js +1 -0
- package/payload/server/public/assets/{dagre-KV5264BT-Cnj0mUZl.js → dagre-KV5264BT-CMEzmhIL.js} +1 -1
- package/payload/server/public/assets/{dagre-Bt-fpckL.js → dagre-bhIG_KnW.js} +1 -1
- package/payload/server/public/assets/data-K_kS__sL.js +1 -0
- package/payload/server/public/assets/{device-url-actions-Bjz3Xzbm.js → device-url-actions-AcOyLSeF.js} +1 -1
- package/payload/server/public/assets/{diagram-5BDNPKRD-DjLzvOlx.js → diagram-5BDNPKRD-6RIoQhIL.js} +1 -1
- package/payload/server/public/assets/{diagram-G4DWMVQ6-DTfuRd-T.js → diagram-G4DWMVQ6-BSp36TVv.js} +1 -1
- package/payload/server/public/assets/{diagram-MMDJMWI5-BaL2mCnx.js → diagram-MMDJMWI5-D54fo52D.js} +1 -1
- package/payload/server/public/assets/{diagram-TYMM5635-C5InWY5R.js → diagram-TYMM5635-CWL8z-Pq.js} +1 -1
- package/payload/server/public/assets/{erDiagram-SMLLAGMA-DO7BXTpn.js → erDiagram-SMLLAGMA-AnnHBo3z.js} +1 -1
- package/payload/server/public/assets/{flowDiagram-DWJPFMVM-DDdAKfLf.js → flowDiagram-DWJPFMVM-laWmBl5o.js} +1 -1
- package/payload/server/public/assets/{ganttDiagram-T4ZO3ILL-arJD8Utm.js → ganttDiagram-T4ZO3ILL-B94ko8ie.js} +1 -1
- package/payload/server/public/assets/{gitGraphDiagram-UUTBAWPF-C55GH-OS.js → gitGraphDiagram-UUTBAWPF-DxzL1fxZ.js} +1 -1
- package/payload/server/public/assets/graph-DeEigyO_.js +1 -0
- package/payload/server/public/assets/graph-labels-C7I5QvNv.js +1 -0
- package/payload/server/public/assets/{graphlib-DL9PM7Ex.js → graphlib-CY-zIElM.js} +1 -1
- package/payload/server/public/assets/{infoDiagram-42DDH7IO-BMSGqUbG.js → infoDiagram-42DDH7IO-BMTajIIr.js} +1 -1
- package/payload/server/public/assets/{ishikawaDiagram-UXIWVN3A-Dw6BZ6BG.js → ishikawaDiagram-UXIWVN3A-B_QauE5O.js} +1 -1
- package/payload/server/public/assets/{journeyDiagram-VCZTEJTY-DrywUGXw.js → journeyDiagram-VCZTEJTY-DmlqSIih.js} +1 -1
- package/payload/server/public/assets/{kanban-definition-6JOO6SKY-DuwtVBBc.js → kanban-definition-6JOO6SKY-ZGDQT7xB.js} +1 -1
- package/payload/server/public/assets/{line-JAksyKHj.js → line-D13opgep.js} +1 -1
- package/payload/server/public/assets/{mermaid-parser.core-BMq-ApBW.js → mermaid-parser.core-C650Sual.js} +1 -1
- package/payload/server/public/assets/{mermaid.core-tH4oX0Kh.js → mermaid.core-BqnQoXTp.js} +3 -3
- package/payload/server/public/assets/{mindmap-definition-QFDTVHPH-D1OiiJga.js → mindmap-definition-QFDTVHPH-BS_8y-tY.js} +1 -1
- package/payload/server/public/assets/{page-BZpoS7iR.js → page-B_rpjIRr.js} +1 -1
- package/payload/server/public/assets/{page-CkvBvezS.js → page-qSH972X0.js} +1 -1
- package/payload/server/public/assets/{pieDiagram-DEJITSTG-Ckwm69PW.js → pieDiagram-DEJITSTG-B5OmNvBO.js} +1 -1
- package/payload/server/public/assets/{public-C-dTMgXu.js → public-DDsYgotk.js} +3 -3
- package/payload/server/public/assets/{quadrantDiagram-34T5L4WZ-COw3yZ1j.js → quadrantDiagram-34T5L4WZ-DTYITdNo.js} +1 -1
- package/payload/server/public/assets/{requirementDiagram-MS252O5E-DqGzM4K-.js → requirementDiagram-MS252O5E-CRZWxH06.js} +1 -1
- package/payload/server/public/assets/{sankeyDiagram-XADWPNL6-D-l1c_Pl.js → sankeyDiagram-XADWPNL6-DazRENhe.js} +1 -1
- package/payload/server/public/assets/{sequenceDiagram-FGHM5R23-BeIi0DtJ.js → sequenceDiagram-FGHM5R23-BcHTxmPy.js} +1 -1
- package/payload/server/public/assets/{stateDiagram-FHFEXIEX-C-jgegLk.js → stateDiagram-FHFEXIEX-DYU7nbqg.js} +1 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BgljVtlp.js +1 -0
- package/payload/server/public/assets/{timeline-definition-GMOUNBTQ-BGFKkYmi.js → timeline-definition-GMOUNBTQ-BKGmqkST.js} +1 -1
- package/payload/server/public/assets/{vennDiagram-DHZGUBPP-5NuIhJLS.js → vennDiagram-DHZGUBPP-BXvLPmX7.js} +1 -1
- package/payload/server/public/assets/{wardleyDiagram-NUSXRM2D-Be9ytVut.js → wardleyDiagram-NUSXRM2D-BCclUa3Z.js} +1 -1
- package/payload/server/public/assets/{xychartDiagram-5P7HB3ND-DCyHg41R.js → xychartDiagram-5P7HB3ND-C-Xp-Eoc.js} +1 -1
- package/payload/server/public/data.html +5 -5
- package/payload/server/public/graph.html +6 -6
- package/payload/server/public/index.html +8 -8
- package/payload/server/public/public.html +5 -5
- package/payload/server/server.js +1024 -2347
- package/payload/platform/scripts/check-sdk-oauth.mjs +0 -185
- package/payload/server/public/assets/channel-fxEghWew.js +0 -1
- package/payload/server/public/assets/classDiagram-6PBFFD2Q-BsWzGW0N.js +0 -1
- package/payload/server/public/assets/classDiagram-v2-HSJHXN6E-BGVa3h90.js +0 -1
- package/payload/server/public/assets/clone-Khvocke2.js +0 -1
- package/payload/server/public/assets/data-DBd-Buhp.js +0 -1
- package/payload/server/public/assets/graph-DUtVdnZ6.js +0 -1
- package/payload/server/public/assets/graph-labels-Dxfue-fP.js +0 -1
- package/payload/server/public/assets/stateDiagram-v2-QKLJ7IA2-BaMs8Znv.js +0 -1
- /package/payload/server/public/assets/{brand-CSQuxS9w.js → brand-Bm671owU.js} +0 -0
package/payload/platform/plugins/brochures/skills/make-brochure/references/seller-brief-template.md
ADDED
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
# Seller's Brief — <Property Name>
|
|
2
|
+
|
|
3
|
+
The answers below are interview answers from the seller. They source the brochure's editorial voice — chapter decks, body paragraphs, captions, taglines, and buyer-avatar tone. The brochure agent reads this file before generating any copy and uses it to anchor every section.
|
|
4
|
+
|
|
5
|
+
This template ships with the `make-brochure` skill at `references/seller-brief-template.md`. To use:
|
|
6
|
+
|
|
7
|
+
1. Copy this file to `<property_dir>/seller-brief.md`.
|
|
8
|
+
2. Fill in every answer. Empty answers are not acceptable; the orchestrator will refuse to invoke `property-brochure` until each question has at least a few sentences.
|
|
9
|
+
3. Save and re-run the orchestrator (or `property-brochure` directly).
|
|
10
|
+
|
|
11
|
+
Answers are not quoted verbatim in the brochure — the agent distils them into the editorial register. If a phrase is so apt the seller wants it preserved word-for-word, mark it `[VERBATIM]` at the start of the answer.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## Story & Motivation
|
|
16
|
+
|
|
17
|
+
**1. Why did you first buy this home when you bought it?**
|
|
18
|
+
|
|
19
|
+
<!-- Answer here. The home's first chapter starts with what drew the current owner. -->
|
|
20
|
+
|
|
21
|
+
**2. How long have you owned this property, and what made you decide it was the right time to sell?**
|
|
22
|
+
|
|
23
|
+
<!-- Answer here. -->
|
|
24
|
+
|
|
25
|
+
**3. What do you love most about this property?**
|
|
26
|
+
|
|
27
|
+
<!-- Answer here. -->
|
|
28
|
+
|
|
29
|
+
**4. What will you miss most when it's sold?**
|
|
30
|
+
|
|
31
|
+
<!-- Answer here. -->
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## Layout & Lifestyle
|
|
36
|
+
|
|
37
|
+
**5. If a buyer walked through the door for the first time, what feeling do you want them to get?**
|
|
38
|
+
|
|
39
|
+
<!-- Answer here. This sets the *deck* of the opening chapter — the single italic sentence at the top of page 3. -->
|
|
40
|
+
|
|
41
|
+
**6. Which room or feature is your personal favourite, and why?**
|
|
42
|
+
|
|
43
|
+
<!-- Answer here. This room gets the strongest photographic treatment in its chapter — the hero cell, not a strip-cell. -->
|
|
44
|
+
|
|
45
|
+
**7. What kind of lifestyle does this home support best (family, professional couple, entertainer, quiet retreat, etc.)?**
|
|
46
|
+
|
|
47
|
+
<!-- Answer here. This shapes the buyer-avatar tone of every body paragraph. -->
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## Improvements & Upgrades
|
|
52
|
+
|
|
53
|
+
**8. Have you done any renovations, upgrades, or improvements since moving in?**
|
|
54
|
+
|
|
55
|
+
<!-- Answer here. -->
|
|
56
|
+
|
|
57
|
+
**9. If so, what did you change and why? (Style, functionality, energy efficiency, etc.)**
|
|
58
|
+
|
|
59
|
+
<!-- Answer here. These become the highlighted items in the particulars list on the Plan & Particulars page. -->
|
|
60
|
+
|
|
61
|
+
**10. Are there any design details or features people often notice or comment on?**
|
|
62
|
+
|
|
63
|
+
<!-- Answer here. These become the strip-cell captions and attr-grid features. -->
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## Local Area & Community
|
|
68
|
+
|
|
69
|
+
**11. What do you love about the local area?**
|
|
70
|
+
|
|
71
|
+
<!-- Answer here. -->
|
|
72
|
+
|
|
73
|
+
**12. Are there any hidden gems — cafés, parks, walks, schools, neighbours — that stand out?**
|
|
74
|
+
|
|
75
|
+
<!-- Answer here. -->
|
|
76
|
+
|
|
77
|
+
**13. What's the commute or transport like for work or weekends away?**
|
|
78
|
+
|
|
79
|
+
<!-- Answer here. -->
|
|
80
|
+
|
|
81
|
+
**14. How would you describe the community vibe to someone who's never been here?**
|
|
82
|
+
|
|
83
|
+
<!-- Answer here. -->
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## Practical & Buyer Avatar
|
|
88
|
+
|
|
89
|
+
**15. Who do you think this home would suit best — and why?**
|
|
90
|
+
|
|
91
|
+
<!-- Answer here. -->
|
|
92
|
+
|
|
93
|
+
**16. What type of buyer do you hope moves in next?**
|
|
94
|
+
|
|
95
|
+
<!-- Answer here. -->
|
|
96
|
+
|
|
97
|
+
**17. Is there anything about the home you feel needs context or explanation before viewings? (e.g., heating, electrics, layout quirks)**
|
|
98
|
+
|
|
99
|
+
<!-- Answer here. Items raised here are flagged as "context" in the Material Information page or footnoted in the Particulars list — they are not omitted from the brochure. -->
|
|
100
|
+
|
|
101
|
+
**18. What do you think buyers might overlook that deserves more attention?**
|
|
102
|
+
|
|
103
|
+
<!-- Answer here. These are the "moments" the brochure deliberately surfaces — sometimes promoting a slot from a strip-cell to a hero. -->
|
|
104
|
+
|
|
105
|
+
**19. If you could describe your home in three words, what would they be?**
|
|
106
|
+
|
|
107
|
+
<!-- Answer here. These three words anchor the cover sub-line OR the opening chapter deck. The brochure uses the seller's words; it does not rephrase them. -->
|
|
108
|
+
|
|
109
|
+
**20. Is there a particular feeling, story, or phrase you'd love buyers to connect with when they see your home online?**
|
|
110
|
+
|
|
111
|
+
<!-- Answer here. This phrase becomes the cover tagline, the opener pull-quote, OR the back-page tagline — wherever it best fits. The brochure carries the seller's exact phrase if marked [VERBATIM]. -->
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
*All answers above are confidential to the brochure assembly process. Sensitive personal information will not be reproduced verbatim in the published brochure unless explicitly marked [VERBATIM].*
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: property-brochure
|
|
3
|
+
description: Create A4 property brochures (landscape default, portrait optional) from raw photos, transcripts, and floorplans. Produces print-ready HTML and a recompressed PDF deliverable. The skill ships an editorial "folio" template by default; if the property has a DESIGN doc that specifies its own visual scheme, follow that instead. Use when asked to create an estate agent brochure, property marketing material, or property listing document.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Property Brochure
|
|
7
|
+
|
|
8
|
+
Produce an A4 property brochure from raw assets. The default deliverable is a 16-page super-premium editorial **folio** in landscape A4. The brochure renders in-browser for live editing and exports to two image-only PDFs (web and print master) plus a self-contained web bundle including a companion landing page.
|
|
9
|
+
|
|
10
|
+
## Output location
|
|
11
|
+
|
|
12
|
+
By default the brochure is written to the **caller's current working directory**. The skill creates `./output/brochure.html`, `./output/web/index.html`, the print PNGs, and the two PDFs underneath `pwd` — no inference, no nesting under a brand workspace.
|
|
13
|
+
|
|
14
|
+
If you want the output elsewhere, pass `output_dir` explicitly (an absolute path or a relative path resolved against CWD). Common overrides:
|
|
15
|
+
|
|
16
|
+
| Scenario | `output_dir` |
|
|
17
|
+
|---|---|
|
|
18
|
+
| No override (the default) | `./output/` under the caller's CWD |
|
|
19
|
+
| Brochure should live next to an existing brand pack | `<brand_dir>/properties/<property_slug>-<id>/output/` |
|
|
20
|
+
| Brochure should land somewhere specific (a delivery folder, a customer's repo) | the supplied absolute path |
|
|
21
|
+
|
|
22
|
+
Do not silently nest the output under a brand workspace just because one is present. The `make-brochure` orchestrator may pass `output_dir` to align with its own routing; this skill on its own runs in the caller's CWD unless told otherwise.
|
|
23
|
+
|
|
24
|
+
## Step 1 — copy the canonical templates (do this first)
|
|
25
|
+
|
|
26
|
+
`references/template.html` and `references/index.html` are the **only** acceptable starting points. They are placeholder-only — every property value is a `{{ token }}`. Copy them before doing anything else. **Do not write brochure HTML or page HTML from scratch. Do not start from a sibling property's output. Do not improvise structure from prose.**
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
mkdir -p <output_dir>/web
|
|
30
|
+
cp ~/.claude/plugins/real-estate-brochure/skills/property-brochure/references/template.html <output_dir>/brochure.html
|
|
31
|
+
cp ~/.claude/plugins/real-estate-brochure/skills/property-brochure/references/index.html <output_dir>/web/index.html
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
`<output_dir>` is whatever the **Output location** section above resolves to — typically `./output/` in the caller's CWD.
|
|
35
|
+
|
|
36
|
+
If the canonical template looks wrong for the brand, **patch the template** (open a discussion with the user about what to change). Don't substitute a different starting point for one run — that bakes drift into every brochure.
|
|
37
|
+
|
|
38
|
+
Full register/structure rules: [references/registers.md](references/registers.md). Forbidden starting points are listed there.
|
|
39
|
+
|
|
40
|
+
## Step 2 — verify the copy worked
|
|
41
|
+
|
|
42
|
+
Both files must contain canonical sentinels (proves they came from `references/`, not hand-written or hand-edited):
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
grep -q '{{ property_name }}' <output_dir>/brochure.html || echo "FAIL: brochure not from template"
|
|
46
|
+
grep -q 'hero-stage' <output_dir>/web/index.html || echo "FAIL: index.html not from references"
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Both greps must succeed before populating content. If either fails, recopy.
|
|
50
|
+
|
|
51
|
+
## Step 3 — choose the visual register
|
|
52
|
+
|
|
53
|
+
| Register | What you change |
|
|
54
|
+
|---|---|
|
|
55
|
+
| **Premium** (template scheme retained) | Keep all super-premium tokens (palette, type, layout) verbatim. Swap **only** the agent's logo and contact details. Do not apply the brand's palette or type tokens. |
|
|
56
|
+
| **Branded** (DESIGN.md re-skin) | Swap font names at `--serif` / `--body-serif` / `--sans`; replace palette tokens with the DESIGN doc's values; substitute logo PNGs. Sixteen-page structure stays. |
|
|
57
|
+
|
|
58
|
+
Decision order:
|
|
59
|
+
1. User said **"premium" / "super-premium"** → Premium (regardless of DESIGN.md).
|
|
60
|
+
2. **DESIGN.md provided** and user did *not* say premium → Branded.
|
|
61
|
+
3. Neither → Premium (template defaults).
|
|
62
|
+
|
|
63
|
+
Detail and forbidden patterns: [references/registers.md](references/registers.md).
|
|
64
|
+
|
|
65
|
+
## Step 4 — populate, render, deliver
|
|
66
|
+
|
|
67
|
+
Read the seller brief once before writing any copy. Then walk the `{{ placeholder }}` tokens in both files top-to-bottom, substituting from the brief and `property.json`. The complete substitution contract — every token, its source field, its expected format and voice — lives in [references/placeholders.md](references/placeholders.md). Each token also has an inline `<!-- REPLACE: ... -->` comment in the template giving the short version.
|
|
68
|
+
|
|
69
|
+
| Concern | Reference |
|
|
70
|
+
|---|---|
|
|
71
|
+
| **Placeholders — the substitution contract** (every `{{ token }}`, what fills it, what format) | [references/placeholders.md](references/placeholders.md) |
|
|
72
|
+
| Seller brief — per-question → brochure mapping, [VERBATIM] contract | [references/seller-brief.md](references/seller-brief.md) |
|
|
73
|
+
| Image preview safety, slot verification, requirements, optimisation, brand logo | [references/images.md](references/images.md) |
|
|
74
|
+
| Editorial copy register, em-dash policy, "home" vs "house", text-on-images, typography, stats rows, AI hero prompt, **per-section composition guide** | [references/copy.md](references/copy.md) |
|
|
75
|
+
| Orientation, 16-page layout, cover, floorplan, distinguishing features, Material Information, QR codes, location map | [references/structure.md](references/structure.md) |
|
|
76
|
+
| Live editing, snapshot capture, PDF deliverable, web bundle | [references/build.md](references/build.md) |
|
|
77
|
+
| `index.html` landing page — sections, hero rotator, mobile/drawer | [references/index-landing.md](references/index-landing.md) |
|
|
78
|
+
|
|
79
|
+
### Substitution completion gate
|
|
80
|
+
|
|
81
|
+
A brochure with any `{{ x }}` still in the rendered HTML is **shipped broken**. Before any snapshot capture or PDF build, run:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
unsubstituted=$(grep -c '{{' "$output_dir/brochure.html" "$output_dir/web/index.html" 2>/dev/null | awk -F: '{s+=$2} END {print s}')
|
|
85
|
+
[ "$unsubstituted" -eq 0 ] || { echo "DEFECT: $unsubstituted unsubstituted {{ tokens }} remain"; exit 1; }
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
`grep '{{ ' brochure.html` is the canonical bug-detector — any match is a defect.
|
|
89
|
+
|
|
90
|
+
## Required inputs
|
|
91
|
+
|
|
92
|
+
- **Property photographs** — minimum 16, ideally 25+
|
|
93
|
+
- **Property name and address** (see `property-extract → Property name vs address`)
|
|
94
|
+
- **Floor plan image**, **EPC rating**
|
|
95
|
+
- **Property walkthrough transcript or written description**
|
|
96
|
+
- **Seller brief** at `<property_dir>/seller-brief.md` — non-empty answers to all 20 questions in `make-brochure/references/seller-brief-template.md`. Stop and ask if missing; do not synthesise from the listing description.
|
|
97
|
+
- **Agent details** — from `property.json -> agent` (no built-in default). Logos follow the colour-of-the-art naming convention: `<brand>-logo-light.png` (for dark surfaces — cover/back) and `<brand>-logo-dark.png` (for light surfaces — TOC).
|
|
98
|
+
- **Page orientation** — `landscape` (default) or `portrait`
|
|
99
|
+
- **DESIGN doc** (optional) — controls register choice; never replaces the template structure
|
|
100
|
+
|
|
101
|
+
## Hard rules (load-bearing — do not violate)
|
|
102
|
+
|
|
103
|
+
- **Never `Read` an image whose longest edge exceeds 2000px** — it can drop the session. Measure with `sips -g pixelWidth -g pixelHeight <file>` first.
|
|
104
|
+
- **Never assign an image to a slot from filename alone.** Verify by pixel content via a contact-sheet montage.
|
|
105
|
+
- **Never synthesise a location map** from postcode, OSM call, or AI artwork. Extract the agent's screenshot or omit. ([references/structure.md → Location map](references/structure.md))
|
|
106
|
+
- **Page count must be even** (16 default; 12 if the property is too small). 14 is forbidden.
|
|
107
|
+
- **Image-only PDFs** — no fonts embedded, no Ghostscript anywhere in the chain.
|
|
108
|
+
- **Self-contained `output/`** — never reference `../` paths. Every asset the HTML uses must live under `output/images/`.
|
|
109
|
+
- **Web bundle must include `index.html`** — a bundle without it is incomplete.
|
|
110
|
+
- **Suppress screen-only chrome before snapshotting** — the template's `.download-bar` is hidden under `@media print` but Playwright's `element.screenshot()` captures the screen render, where the bar IS visible. The render script in `build.md` injects a style tag (`.download-bar { display: none !important; }`) before capture. Any custom render script must do the same.
|
|
111
|
+
- **No `{{ token }}` may remain in rendered output** — `grep '{{' output/brochure.html` must return zero matches before PDFs are built.
|
|
112
|
+
|
|
113
|
+
## Scope
|
|
114
|
+
|
|
115
|
+
**Included**: HTML brochure + companion landing page, image organisation and per-slot optimisation, AI hero prompt, all print snapshots at 300 dpi, two image-only PDF deliverables (print master + web), a self-contained web bundle (`output/web/` + `<slug>-web.zip`), Material Information compliance, EPC chart, disclaimers.
|
|
116
|
+
|
|
117
|
+
**Not included**: Professional photography, actual EPC assessment, legal verification of Material Information values, agent CRM integration, print shop preparation (CMYK, bleed marks), executing the AI hero image prompt, selectable / searchable text in the PDFs (deliberate trade-off; see `a4-print-documents → Why image-only`).
|
|
118
|
+
|
|
119
|
+
**Depends on**: Playwright (Node `playwright` package), local HTTP server for browser preview, `a4-print-documents` skill, `cwebp` (libwebp), `img2pdf`, `qpdf`, ImageMagick (`magick`).
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
# Build pipeline — live editing, snapshots, PDFs, web bundle
|
|
2
|
+
|
|
3
|
+
## Live editing workflow
|
|
4
|
+
|
|
5
|
+
1. Copy template to property directory, populate with content
|
|
6
|
+
2. Stage `output/images/` per `images.md → Image renaming and optimisation`
|
|
7
|
+
3. Serve locally: `python3 -m http.server <port>` from the project root
|
|
8
|
+
4. Navigate Playwright to the brochure URL
|
|
9
|
+
5. Present to user in browser for review
|
|
10
|
+
6. User requests changes — iterate on content, image sizing, page balance
|
|
11
|
+
7. Verify every page fits A4: measure `scrollHeight` for all `.page` elements
|
|
12
|
+
8. Verify no 404s in the browser console
|
|
13
|
+
9. Repeat 5–8 until user approves the final copy
|
|
14
|
+
10. **Only after user approval**: render snapshots (two passes — 300 dpi to `output/`, 192 dpi to `output/.snapshots-web/`) per **Print snapshot capture** below
|
|
15
|
+
11. Build both PDFs (img2pdf + qpdf) per **PDF deliverable** below
|
|
16
|
+
12. Build the web bundle (96 dpi JPGs + bundled web PDF + zip) per **Web bundle** below
|
|
17
|
+
13. User downloads the web PDF via brochure.html's Download button or receives the print master separately for press/print runs
|
|
18
|
+
|
|
19
|
+
Do not capture snapshots during the editing cycle — they are expensive and invalidated by every change.
|
|
20
|
+
|
|
21
|
+
## Print snapshot capture
|
|
22
|
+
|
|
23
|
+
Every page is pre-captured as a PNG. The PNGs are used both as the print-stylesheet replacement (so the live brochure prints to a clean PDF when a user hits Cmd+P) **and** as the source images bound into the two PDF deliverables. **Run this only once, after the user approves the final version.**
|
|
24
|
+
|
|
25
|
+
**Two render passes, two DPI tiers:**
|
|
26
|
+
|
|
27
|
+
| Snapshot set | DPR | Size per page (landscape A4) | Used for |
|
|
28
|
+
|---|---|---|---|
|
|
29
|
+
| `<property_dir>/output/*-print.png` | 3.125× (300 dpi) | 3509×2481 px | print-master PDF + the print stylesheet's `.print-img` swap |
|
|
30
|
+
| `<property_dir>/output/.snapshots-web/*-print.png` | 2× (192 dpi) | 2246×1588 px | web PDF |
|
|
31
|
+
|
|
32
|
+
The print-tier PNGs (300 dpi) are the canonical archived snapshots — they live at the top of `output/` next to the HTML and the PDFs. The web-tier PNGs (192 dpi) are an intermediate render step and live in `output/.snapshots-web/`; they're consumed by the web-PDF build and can be deleted afterwards.
|
|
33
|
+
|
|
34
|
+
**Render via Playwright** (one script, run twice with different `SCALE`):
|
|
35
|
+
|
|
36
|
+
```javascript
|
|
37
|
+
const { chromium } = require('playwright');
|
|
38
|
+
const path = require('path');
|
|
39
|
+
|
|
40
|
+
const HTML = process.argv[2]; // path to brochure.html
|
|
41
|
+
const OUT_DIR = process.argv[3]; // output directory for PNGs
|
|
42
|
+
const SCALE = parseFloat(process.argv[4] || '3.125'); // 2 for web, 3.125 for print
|
|
43
|
+
|
|
44
|
+
(async () => {
|
|
45
|
+
const browser = await chromium.launch();
|
|
46
|
+
const context = await browser.newContext({
|
|
47
|
+
viewport: { width: 1123, height: 794 }, // 794 × 1123 if portrait
|
|
48
|
+
deviceScaleFactor: SCALE,
|
|
49
|
+
});
|
|
50
|
+
const page = await context.newPage();
|
|
51
|
+
await page.goto(`file://${HTML}`, { waitUntil: 'networkidle' });
|
|
52
|
+
|
|
53
|
+
// Suppress screen-only chrome before snapshotting.
|
|
54
|
+
// The template has @media print { .download-bar { display: none } } so the
|
|
55
|
+
// bar disappears under Cmd+P, but Playwright's element.screenshot() captures
|
|
56
|
+
// the SCREEN render — @media print does not fire. Without this style-tag
|
|
57
|
+
// injection, the floating "Download PDF" button (and any future screen-only
|
|
58
|
+
// overlay) leaks into every per-page snapshot and into both PDFs.
|
|
59
|
+
// KEEP this in any custom render script — it is load-bearing.
|
|
60
|
+
await page.addStyleTag({ content: `
|
|
61
|
+
.download-bar { display: none !important; }
|
|
62
|
+
` });
|
|
63
|
+
|
|
64
|
+
await page.evaluate(() =>
|
|
65
|
+
Promise.all(Array.from(document.images, img =>
|
|
66
|
+
img.complete ? null : new Promise(r => { img.onload = img.onerror = r; }))));
|
|
67
|
+
|
|
68
|
+
const pages = await page.$$('section.page');
|
|
69
|
+
for (let i = 0; i < pages.length; i++) {
|
|
70
|
+
const label = await pages[i].getAttribute('data-screen-label');
|
|
71
|
+
const filename = i === 0
|
|
72
|
+
? 'cover-print.png'
|
|
73
|
+
: /back/i.test(label || '') ? 'backpage-print.png' : `page${i+1}-print.png`;
|
|
74
|
+
await pages[i].scrollIntoViewIfNeeded();
|
|
75
|
+
await pages[i].screenshot({ path: path.join(OUT_DIR, filename), type: 'png' });
|
|
76
|
+
}
|
|
77
|
+
await browser.close();
|
|
78
|
+
})();
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Run it once for each tier:
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
node render-snapshots.js <property_dir>/output/brochure.html <property_dir>/output/ 3.125
|
|
85
|
+
node render-snapshots.js <property_dir>/output/brochure.html <property_dir>/output/.snapshots-web/ 2
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
For a 16-page folio, each pass produces `cover-print.png`, `page2-print.png` through `page15-print.png`, and `backpage-print.png` — sixteen files in each directory.
|
|
89
|
+
|
|
90
|
+
**Print CSS**: `@page { size: A4 landscape; margin: 0 }` (or `portrait` if overridden). The print stylesheet has two paths, both still needed:
|
|
91
|
+
|
|
92
|
+
1. **Snapshot path (primary)** — when a `.print-img` has a non-empty `src`, the rule `.page:has(.print-img[src]:not([src=""])) > *:not(.print-img) { display: none }` hides everything else and the snapshot fills the page at `z-index: 9999`. The 300 dpi snapshots are referenced by `.print-img src=""` so the live DOM print path also gets full-quality output if the user hits Cmd+P.
|
|
93
|
+
2. **Live-DOM fallback** — if a snapshot is missing or empty, the page prints the live DOM. The folio is forced visible by overriding `.folio` with `z-index: 100`, `bottom: 6mm`, and **dropping `backdrop-filter`** (Chromium's PDF engine strips it, making the pill effectively invisible against dark imagery). The pill background falls back to a solid `rgba(252, 251, 248, 0.95)` for light pages and `rgba(6, 68, 68, 0.78)` for `.folio-dark` pages. The same `z-index` lift is applied to `.back-foot`.
|
|
94
|
+
|
|
95
|
+
**Why both paths matter**: users sometimes hit Cmd+P before snapshots are captured, or the snapshot pipeline fails silently. The fallback guarantees the folio still prints. The `.print-img` elements use `opacity: 0; width: 1px; height: 1px` on screen (not `display: none` — that prevents image loading in some browsers).
|
|
96
|
+
|
|
97
|
+
## PDF deliverable
|
|
98
|
+
|
|
99
|
+
The brochure ships as `brochure.html` plus **two PDFs**, both in `<property_dir>/output/`:
|
|
100
|
+
|
|
101
|
+
- `<property_slug>-brochure-print.pdf` — **print master** (300 dpi, ~65–100 MB for a 16-page folio). Canonical archive artefact, suitable for sending to commercial print houses.
|
|
102
|
+
- `<property_slug>-brochure-web.pdf` — **web/digital deliverable** (192 dpi, ~20–35 MB). What gets emailed, attached, and downloaded from the web bundle.
|
|
103
|
+
|
|
104
|
+
Both are image-only — no fonts embedded, no Ghostscript anywhere in the chain. See **a4-print-documents → PDF deliverables** for the full rationale on why image-only is the right answer.
|
|
105
|
+
|
|
106
|
+
### Build steps
|
|
107
|
+
|
|
108
|
+
For each grade, bind the per-page PNG snapshots into a PDF via img2pdf, then linearize via qpdf:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Print master from 300 dpi PNGs (in output/)
|
|
112
|
+
cd <property_dir>/output/
|
|
113
|
+
img2pdf --pagesize 297mmx210mm \
|
|
114
|
+
--title "<Property Name> · <address line 1>" \
|
|
115
|
+
--author "<Agent Name>" \
|
|
116
|
+
--output /tmp/pre-linearize.pdf \
|
|
117
|
+
cover-print.png page2-print.png page3-print.png page4-print.png \
|
|
118
|
+
page5-print.png page6-print.png page7-print.png page8-print.png \
|
|
119
|
+
page9-print.png page10-print.png page11-print.png page12-print.png \
|
|
120
|
+
page13-print.png page14-print.png page15-print.png backpage-print.png
|
|
121
|
+
qpdf --linearize --object-streams=disable \
|
|
122
|
+
/tmp/pre-linearize.pdf \
|
|
123
|
+
<property_slug>-brochure-print.pdf
|
|
124
|
+
|
|
125
|
+
# Web PDF from 192 dpi PNGs (in output/.snapshots-web/)
|
|
126
|
+
cd <property_dir>/output/.snapshots-web/
|
|
127
|
+
img2pdf --pagesize 297mmx210mm \
|
|
128
|
+
--title "<Property Name> · <address line 1>" \
|
|
129
|
+
--author "<Agent Name>" \
|
|
130
|
+
--output /tmp/pre-linearize.pdf \
|
|
131
|
+
cover-print.png page2-print.png … backpage-print.png
|
|
132
|
+
qpdf --linearize --object-streams=disable \
|
|
133
|
+
/tmp/pre-linearize.pdf \
|
|
134
|
+
<property_dir>/output/<property_slug>-brochure-web.pdf
|
|
135
|
+
|
|
136
|
+
rm /tmp/pre-linearize.pdf
|
|
137
|
+
rm -rf <property_dir>/output/.snapshots-web/ # optional cleanup
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
`297mmx210mm` is **landscape** A4. For portrait flip to `210mmx297mm`. img2pdf preserves the embedded PNG bytes verbatim — no re-encode, no quality loss. qpdf's `--object-streams=disable` is required because the PDF 1.4 linearization profile (which we want for maximum viewer compatibility) is incompatible with object streams.
|
|
141
|
+
|
|
142
|
+
### Verification — three commands, all must pass for both files
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
qpdf --check <output>.pdf # → "No syntax or stream encoding errors found"
|
|
146
|
+
pdfinfo <output>.pdf | grep Optimized # → "Optimized: yes"
|
|
147
|
+
pdffonts <output>.pdf | wc -l # → 2 (header rows only; no font entries)
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
A typical 16-page folio ships with the print master at **65–100 MB** and the web PDF at **25–45 MB**. If the print master lands under ~40 MB, the snapshot DPR is wrong (likely rendered at 2× instead of 3.125×). If the web PDF exceeds ~55 MB, source photos may be over-floor (see **Image resolution floor** in a4-print-documents) or the snapshot DPR drifted to 3.125× by accident.
|
|
151
|
+
|
|
152
|
+
If the web PDF runs into a transport limit (some webmail systems cap at 25 MB), substitute JPEG-encoded snapshots: `magick page-print.png -quality 88 -strip -interlace none -colorspace sRGB page-print.jpg`, then bind `.jpg` files instead of `.png`. Expect 30–40% size reduction with no visible quality loss at 192 dpi.
|
|
153
|
+
|
|
154
|
+
### When to (re)generate
|
|
155
|
+
|
|
156
|
+
Generate the PDF after every approved layout change. Do not let the PDF drift behind the HTML.
|
|
157
|
+
|
|
158
|
+
## Web bundle — self-contained zip for hosting
|
|
159
|
+
|
|
160
|
+
In addition to the print-quality artefacts in `output/`, the brochure ships a separate **self-contained web bundle** under `output/web/`, then zipped to `output/<slug>-web.zip`. This is what a property micro-site or marketing portal hosts publicly. It is intentionally smaller — the canonical `output/` photos and snapshots are sized for archival print quality, which is wasteful when the brochure is being delivered as a one-time HTML page on a web page.
|
|
161
|
+
|
|
162
|
+
The web bundle is a parallel directory with the same on-disk shape as `output/` but with smaller assets:
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
output/web/
|
|
166
|
+
brochure.html # identical content; only print-img references switched .png → .jpg
|
|
167
|
+
index.html # companion landing page (mandatory in bundle)
|
|
168
|
+
cover-print.jpg, page2-print.jpg … backpage-print.jpg # 96 dpi JPEG snapshots (q=88)
|
|
169
|
+
<slug>-brochure.pdf # identical bytes to <slug>-brochure-web.pdf at the property level — simpler name inside the bundle since there's only one PDF here
|
|
170
|
+
images/
|
|
171
|
+
<slug>-NN.webp # web-tier per-slot encodings (see table below)
|
|
172
|
+
qr-video.png, qr-listing.png
|
|
173
|
+
<brand>-logo-light.png
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Web-tier image encoding
|
|
177
|
+
|
|
178
|
+
The same per-slot tier idea as the digital floor in `images.md`, but with smaller widths and slightly lower quality — sized for screen viewing at 100% zoom, not for print sharpness.
|
|
179
|
+
|
|
180
|
+
| Slot type | Web tier (long edge / quality) | Typical file size |
|
|
181
|
+
|---|---|---|
|
|
182
|
+
| Hero / cover / banner / feature / drone aerial / front elevation / outdoor full-bleed | **1300 px @ q82** | 80–300 KB |
|
|
183
|
+
| Story photo (in-spread half-page) | **1100 px @ q80** | 60–250 KB |
|
|
184
|
+
| Gallery thumb / strip / image-led grid cell | **800 px @ q76** | 25–80 KB |
|
|
185
|
+
| **Floor plan** (PNG, line art) | **source file copied unchanged** — `cp <slug>-floorplan.png web/images/` | matches source (often 500 KB – 1 MB) |
|
|
186
|
+
| Site plan (raster line art) | **1100 px @ q80** WebP if not already PNG; if PNG, copy unchanged | 30–60 KB or source size |
|
|
187
|
+
|
|
188
|
+
A 27-image folio typically lands at **~2.5 MB** of web photographs, with the floor plan adding **0.5–1.0 MB** on top because line art is preserved at source resolution. Total web image weight is typically 3.0–3.5 MB.
|
|
189
|
+
|
|
190
|
+
**Floor-plan rule, repeated for emphasis.** Line-art PNG floor plans are **never re-encoded** for the web bundle — copy the source file as-is. Browsers render PNG line art crisply at any zoom level; converting to WebP introduces visible artefacts on text and rules even at q90+. The bundle gains a few hundred KB but the trade-off is on the right side.
|
|
191
|
+
|
|
192
|
+
### Print snapshots — JPEG at 96 dpi for the web bundle
|
|
193
|
+
|
|
194
|
+
The canonical snapshots in `output/` are 300 dpi PNG (~4–7 MB each, ~65 MB total) — far too heavy for the web bundle's `.print-img` swap layer. For the web bundle, derive 96 dpi JPEG copies directly from the canonical 300 dpi PNGs (no PDF round-trip):
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
cd output/web
|
|
198
|
+
for png in ../*-print.png; do
|
|
199
|
+
base=$(basename "$png" .png)
|
|
200
|
+
magick "$png" -resize 1123x794^ -quality 88 -strip -interlace none -colorspace sRGB "$base.jpg"
|
|
201
|
+
done
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
`-resize 1123x794^` downsamples to A4-landscape at 96 dpi (use `794x1123^` for portrait). `-strip` removes embedded metadata (EXIF, ICC) so the bundle stays minimal. `-interlace none` produces baseline JPEG which decodes faster in mobile previewers than progressive.
|
|
205
|
+
|
|
206
|
+
JPEG at 88% quality is roughly 5× smaller than the PNG equivalent for photographic content. A 16-page folio's web-bundle snapshots total ~3 MB. The brochure HTML's `print-img` references must be updated from `.png` to `.jpg` on the web copy:
|
|
207
|
+
|
|
208
|
+
```python
|
|
209
|
+
# Edit the web copy of brochure.html only — leave the canonical output/brochure.html unchanged
|
|
210
|
+
import re
|
|
211
|
+
with open("output/web/brochure.html") as f:
|
|
212
|
+
s = f.read()
|
|
213
|
+
s = re.sub(r'(cover-print|page\d+-print|backpage-print)\.png',
|
|
214
|
+
lambda m: m.group(1) + '.jpg', s)
|
|
215
|
+
with open("output/web/brochure.html", "w") as f:
|
|
216
|
+
f.write(s)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
A 16-page folio's web-bundle snapshots total ~3 MB (vs ~85 MB for the canonical print PNGs), with no perceptual difference at typical Cmd+P quality.
|
|
220
|
+
|
|
221
|
+
### Copy the web PDF into the bundle
|
|
222
|
+
|
|
223
|
+
The web PDF (`<slug>-brochure-web.pdf` at the property level) is also placed inside the bundle, named simply `<slug>-brochure.pdf` to match `index.html` and `brochure.html` link conventions (where there's only one PDF in scope, no `-web` suffix is needed):
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
cp output/<slug>-brochure-web.pdf output/web/<slug>-brochure.pdf
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Bundling
|
|
230
|
+
|
|
231
|
+
After populating `output/web/`, zip it with `-X` (strip extra attributes) and exclude any `.DS_Store` / AppleDouble files:
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
cd output && rm -f <slug>-web.zip
|
|
235
|
+
( cd web && zip -r -X "../<slug>-web.zip" . -x "*.DS_Store" "._*" )
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
A typical 16-page folio web zip is **30–50 MB**, dominated by the embedded web PDF. The `output/web/` directory remains on disk alongside the zip — it's the unzipped form of the same bundle, useful for direct upload to a static-site host.
|
|
239
|
+
|
|
240
|
+
### Smoke-test before declaring done
|
|
241
|
+
|
|
242
|
+
Serve the unzipped bundle from an isolated temp directory and verify every referenced asset returns 200:
|
|
243
|
+
|
|
244
|
+
```bash
|
|
245
|
+
TMP=/tmp/web-test && rm -rf $TMP && mkdir -p $TMP
|
|
246
|
+
cd $TMP && unzip -q /path/to/<slug>-web.zip
|
|
247
|
+
python3 -m http.server 8765 &
|
|
248
|
+
for f in brochure.html index.html cover-print.jpg images/<slug>-01.webp images/<brand>-logo-light.png <slug>-brochure.pdf; do
|
|
249
|
+
echo "$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:8765/$f) $f"
|
|
250
|
+
done
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
The brochure should render the same as the canonical preview, just lighter on the wire. If any 404 appears, the web copy is missing a referenced file — fix and re-zip.
|
|
254
|
+
|
|
255
|
+
### What stays in `output/` vs. what moves to `output/web/`
|
|
256
|
+
|
|
257
|
+
| File | `output/` (canonical archive) | `output/web/` (web bundle) |
|
|
258
|
+
|---|---|---|
|
|
259
|
+
| `brochure.html` | full-resolution images, `.png` snapshot refs | identical structure, `.jpg` snapshot refs, smaller image refs |
|
|
260
|
+
| `index.html` | — | ✓ companion landing page; see `index-landing.md` |
|
|
261
|
+
| `<slug>-brochure-print.pdf` | ✓ canonical print master (50–80 MB, 300 dpi) | — (too large to bundle) |
|
|
262
|
+
| `<slug>-brochure-web.pdf` | ✓ web/digital deliverable (20–35 MB, 192 dpi) | — copied into bundle as `<slug>-brochure.pdf` |
|
|
263
|
+
| `<slug>-brochure.pdf` | — | ✓ identical bytes to `-web.pdf`; matches index.html / brochure.html link |
|
|
264
|
+
| `cover-print.png … backpage-print.png` | ✓ 300 dpi PNG (~4–7 MB each) — canonical snapshots | — replaced by 96 dpi `.jpg` versions |
|
|
265
|
+
| `cover-print.jpg … backpage-print.jpg` | — | ✓ 96 dpi JPEG (~150 KB each, derived from the 300 dpi PNGs) |
|
|
266
|
+
| `images/<slug>-NN.webp` | full-quality per Render-slot table | web-tier per the web table above |
|
|
267
|
+
| `images/qr-*.png`, `images/<brand>-logo-*.png` | ✓ | ✓ (copied unchanged — already small) |
|
|
268
|
+
| `.snapshots-web/*-print.png` | ✓ intermediate (192 dpi PNGs used by the web-PDF build; deletable after) | — |
|
|
269
|
+
|
|
270
|
+
The convention: `output/` is the canonical archive for the property's lifetime. `output/web/` is a derived bundle, regenerable any time from the canonical artefacts.
|