Products

Product catalog for renovation services and funding products. Products define what Renewa offers — from energy consulting (iSFP) to specific funding program services (BEG EM, KfW). Supports bundles, application type mapping, and bidirectional sync with HubSpot Integration.

Source Files

LayerPath
Schemabackend/src/db/schema.ts (line ~3331)
Admin Routesbackend/src/routes/admin/products.ts
Servicebackend/src/services/catalog-service.ts
Admin Pagesfrontend/src/pages/admin/AdminProductsList.tsx, AdminProductDetail.tsx
Seed Databackend/src/db/seeds/products.ts (174KB — large catalog)

Database Tables

TablePurpose
productsMain entity — key, label, category, pricing, HubSpot sync
product_bundle_childrenParent-child relationships for bundle products
product_application_typesJunction: which products apply to which application types

Key Fields

FieldTypeNotes
keytextUnique identifier (e.g., bafa_beg_em, effi_wg, isfp)
shortNametextShort display name (e.g., BEG EM, Effi WG, iSFP)
labeljsonb LocalizedTextBilingual name (de/en)
descriptionjsonb LocalizedTextBilingual description
categoryvarcharGrouping — foerdermittel (funding), beratung (consulting)
actorvarcharResponsible party — engineer, backoffice, technician, team
productNumbervarcharHubSpot Produktnummer (e.g., BBG EFFI AT)
listPriceintegerPrice in cents (e.g., 110000 = 1100.00 EUR)
isBundlebooleanWhether this is a bundle (Bundelprodukt)
productTypeKeyvarcharMatrix match for building component type (dach, heizung, fassade)
applicationTypeKeyvarcharMatrix match for application type (beg_em, kfw_261)
sourcevarcharrenewa (seeded) or hubspot (synced)
hubspotIdvarcharBidirectional sync with HubSpot Integration

Relationships

Product 1──* Product Bundle Children (parent)
Product *──1 Product Bundle Children (child)
Product *──* Application Types (via product_application_types)
Product *──* Quote Line Items (used in quotes)
Product *──* Invoice Line Items (used in invoices)

HubSpot Sync

Products sync bidirectionally with HubSpot:

DirectionDetails
Renewa HubSpotSeeded products pushed as HubSpot products
HubSpot RenewaProducts created in HubSpot imported with source: 'hubspot'
Shared fieldshubspotId, sku, priceEur, hsStatus, hubspotProperties
Lifecyclearchived, deletedAt, mergedIntoHubspotId for sync state

Bundle System

Bundle products have child products via product_bundle_children:

  • parentProductId the bundle product
  • childProductId individual component products
  • sortOrder controls display ordering
  • Unique constraint prevents duplicate parent-child links

Features

  • Large seeded catalog — 174KB seed file with real German renovation products
  • Bundle products with parent-child composition (Bundelprodukt)
  • Application type mapping — defines which products apply to which funding types
  • Matrix matching via productTypeKey, applicationTypeKey, technicalPlanningTypeKey
  • Admin management via Admin Dashboard with list and detail views
  • HubSpot sync as HubSpot products and line items
  • Used in Quotes and Invoices as line item references

Quotes | Invoices | Funding Programs | Measures | HubSpot Integration | Admin Dashboard | Database Architecture | Database Seeding