Users & Authentication
3 tables
users
Master user record for all user types (breeder, buyer, admin). Links to Supabase Auth via auth_uid.
breeder_profiles
Extended public profile for breeders: business info, location, verification, gallery, stats. 1:1 with users.
buyer_profiles
Buyer profile with household info, lifestyle, dog preferences, and profile completion state. 1:1 with users.
Listings & Breeding
7 tables
dog_breeds
Master breed data: size, temperament traits (1-5 scale), compatibility, care needs. Full-text GIN search index.
dogs
Breeder-owned breeding dogs (sires & dams). Tracks health tests, achievements, breeding status.
litters
Planned/active/completed litters with parent pairing, dates, and waitlist status.
puppies
Individual puppies: listing, health, pricing, reservation lifecycle. AI match profile for buyer matching.
rehoming_dogs
Dogs listed for rehoming by owners. Includes behavior, compatibility, urgency, and requirements.
heat_cycles
Tracks heat cycles for breeding females. Found in breeder_portal migration.
expected_litters
Pre-litter planning: expected date, pregnancy confirmation, waitlist settings. Used by InquiryRepository.
Communication & Inquiries
9 tables
inquiries
Central inquiry system: buyer-to-breeder communication with compatibility scoring, auto-reject, and status workflow.
inquiry_messages
Chat messages within an inquiry. Supports AI responses and attachments.
inquiry_preferences
Buyer preferences per inquiry: breed, color, sex, count.
inquiry_status_history
Audit trail for inquiry status changes.
chat_rooms
Legacy direct message rooms with polymorphic context (application/puppy_inquiry).
messages
Individual chat messages within legacy chat_rooms. Partitioned by month.
notifications
In-app, email, and SMS notification records with delivery status.
breeder_faqs
Breeder FAQ configurations with AI auto-response capability.
auto_rejection_rules
Configurable auto-rejection rules per breeder based on profile completeness and compatibility scores.
Payments & Subscriptions
5 tables
payments
Payment requests and Stripe transactions for reservation deposits and final payments.
reservations
Puppy reservations with confirmation number, pickup details, and deposit link.
subscriptions
Breeder subscriptions with Stripe integration. Tiers: free, premium.
stripe_connect_accounts
Stripe Connect onboarding for breeder payouts. Linked from breeder_profiles.
webhook_events
Idempotent Stripe webhook event log for deduplication.
Breeder Sites
6 tables
breeder_sites
Premium AI-built breeder websites: tier (free/premium), custom domain, theme, publish status.
breeder_site_pages
Page builder pages for breeder sites: templates, sections (JSONB), nav order.
breeder_pages
Legacy Puck page builder data for breeder websites.
breeder_media
Media library for breeder sites: images, videos, documents with storage paths.
breeder_media_usage
Tracks where media is used across breeder site pages.
anonymous_leads
Lead capture from breeder site visitors before they sign up.
Compliance & Regulations
12 tables
cantons
Swiss cantons master data with multilingual names (DE/FR/IT).
cantonal_legal_status_types
Legal status categories for breed regulations (severity 0-5).
cantonal_breed_regulations
Per-canton breed legal status: permits, blood percentage thresholds, effective dates.
cantonal_dog_regulations
General dog regulations per canton: training, leashing, fines. Multilingual (DE/FR/IT).
cantonal_training_requirements
Canton-specific dog training requirements.
cantonal_breed_categories
Breed category definitions per canton (e.g., Rassetypenliste I/II in Zürich). Maps breeds to cantonal risk tiers.
cantonal_restricted_areas
Area types and restriction types per canton: banned/leash/muzzle zones, seasonal periods, time windows, fine amounts.
breed_regulations
Club-level breeding rules: age limits, litter caps, mandatory tests, certifications.
breed_guideline_documents
Downloadable guideline PDFs per breed from clubs.
breeder_compliance_steps
Per-breeder compliance checklist tracking (e.g. health tests done, registrations completed).
consent_records
GDPR/data consent tracking for users.
breed_health_requirements
Required health screenings per breed (hip scores, eye tests, etc.).
Engagement & Tracking
14 tables
applications
Buyer applications for puppies, litter waitlists, or rehoming — the full workflow from submission to decision.
waitlists
Ordered user queue per litter with gender/color preferences and offer tracking.
reviews
Buyer reviews of breeders with multi-dimensional ratings and breeder response.
favorite_puppies
Junction: user ↔ bookmarked puppies.
favorite_breeders
Junction: user ↔ bookmarked breeders.
favorite_litters
Junction: user ↔ bookmarked litters.
favorite_dogs
Junction: user ↔ bookmarked breeding dogs.
favorite_breeds
Junction: user ↔ bookmarked breeds.
breeder_blog_posts
Breeder-authored content/blog posts with optional litter/dog links.
user_activities
Activity/audit-style tracking with IP, user agent, and metadata.
user_views
Tracks entity view counts per user.
user_interactions
Tracks user interaction events (clicks, shares, etc.).
breeder_waitlist_settings
Per-breeder waitlist configuration and preferences.
Rasseklub / SKG
9 tables
breed_clubs
SKG breed club master data. 112 clubs seeded. Core reference for the club admin system.
breed_club_events
Club events: shows, meetings, training days.
breeder_breeds
Junction: breeder ↔ breed. Which breeds a breeder works with.
breeder_clubs
Junction: breeder ↔ club with membership number.
club_users
Independent club-tool user identity. Links to Supabase Auth. Separate from marketplace users.
club_memberships
>Links club_user to breed_club with role (admin/zuchtwart/member) and status. One user can belong to multiple clubs.
club_breeders
>Club-context breeder profile. Kennel name, breeding approval, facility inspection. Optional bridge to WelpenMatch via welpenmatch_profile_id.
club_dogs
>Club-registered breeding dogs. Registration number, microchip, breed details. Linked to club_breeders.
health_tests
>Per-dog health certificates and test results. Verified by Zuchtwart/admin. Core of the compliance pipeline.
Admin & Operations
12 tables
audit_log
Generic audit trail for operational/security logging via trigger.
platform_reports
Off-platform solicitation reports. Buyers can anonymously report breeders bypassing the platform.
breeder_violations
3-strikes moderation: warning → suspension → ban. Links to platform reports.
dog_ownership_records
Chain of ownership for dogs purchased via the platform. Links buyer, breeder, puppy, and payment.
rehoming_requests
Buyer-initiated rehoming workflow: return to breeder or find new home.
support_tickets
User support tickets created via Telegram bot.
email_subscriptions
Email subscription preferences per user.
email_send_log
Transactional email delivery log.
telegram_link_tokens
Tokens for linking Telegram accounts to Welpenmatch users.
telegram_bot_sessions
Telegram bot conversation state persistence.
signup_attempts
Rate limiting for signup attempts.
import_records + related
Data import tracing: import_records, import_documents, import_timeline_events, import_vaccination_records.
Entity Relationship Diagram
Core tables and foreign-key relationships. Scroll/zoom to explore.
erDiagram
users ||--o| breeder_profiles : "1:1 profile"
users ||--o| buyer_profiles : "1:1 profile"
users ||--o{ dogs : "owns"
users ||--o{ litters : "creates"
users ||--o{ puppies : "lists"
users ||--o{ rehoming_dogs : "owns"
users ||--o{ inquiries : "buyer"
users ||--o{ inquiries : "breeder"
users ||--o{ applications : "submits"
users ||--o{ applications : "receives"
users ||--o{ notifications : "receives"
users ||--o{ reviews : "writes"
users ||--o{ reviews : "reviewed"
users ||--o{ waitlists : "joins"
users ||--o{ breeder_blog_posts : "writes"
users ||--o{ user_activities : "generates"
users ||--o{ favorite_puppies : "saves"
users ||--o{ favorite_breeders : "saves"
users ||--o{ messages : "sends"
users ||--o| subscriptions : "has"
users ||--o| stripe_connect_accounts : "has"
dog_breeds ||--o{ dogs : "classifies"
dog_breeds ||--o{ litters : "classifies"
dog_breeds ||--o{ puppies : "classifies"
dog_breeds ||--o{ rehoming_dogs : "classifies"
dog_breeds ||--o{ cantonal_breed_regulations : "regulated"
dog_breeds ||--o{ breed_clubs : "associated"
dog_breeds ||--o{ club_dogs : "classifies"
dogs ||--o{ litters : "mother"
dogs ||--o{ litters : "father"
dogs ||--o{ expected_litters : "parent"
litters ||--o{ puppies : "contains"
litters ||--o{ waitlists : "has"
litters ||--o{ applications : "target"
litters ||--o{ breeder_blog_posts : "referenced"
puppies ||--o{ applications : "target"
puppies ||--o{ reviews : "about"
puppies ||--o{ waitlists : "offered"
puppies ||--o{ favorite_puppies : "favorited"
puppies ||--o{ dog_ownership_records : "transferred"
rehoming_dogs ||--o{ applications : "target"
inquiries ||--o{ inquiry_messages : "has"
inquiries ||--o{ inquiry_preferences : "has"
inquiries ||--o{ inquiry_status_history : "tracks"
inquiries ||--o{ payments : "paid_via"
inquiries ||--o{ reservations : "reserved_via"
inquiries ||--o{ platform_reports : "reported"
inquiries ||--o{ dog_ownership_records : "resulted_in"
payments ||--o{ reservations : "deposit"
chat_rooms ||--o{ messages : "contains"
breeder_sites ||--o{ breeder_site_pages : "has"
cantons ||--o{ cantonal_breed_regulations : "has"
cantons ||--o{ cantonal_dog_regulations : "has"
cantons ||--o{ cantonal_breed_categories : "has"
cantons ||--o{ cantonal_restricted_areas : "has"
dog_ownership_records ||--o{ rehoming_requests : "has"
breed_clubs ||--o{ breed_club_events : "has"
breed_clubs ||--o{ breeder_clubs : "has"
breed_clubs ||--o{ club_memberships : "has"
club_users ||--o{ club_memberships : "has"
club_memberships ||--o{ club_breeders : "has"
club_breeders ||--o{ club_dogs : "has"
club_dogs ||--o{ health_tests : "has"
breeder_violations }o--|| users : "breeder"
platform_reports }o--|| users : "reporter"
users {
uuid id PK
uuid auth_uid UK
text email UK
text user_type
}
breeder_profiles {
uuid id PK
uuid user_id FK
text breeder_name
text slug UK
text verification_status
}
buyer_profiles {
uuid id PK
uuid user_id FK
}
dogs {
uuid id PK
uuid breeder_id FK
uuid breed_id FK
text gender
text breeding_status
}
litters {
uuid id PK
uuid breeder_id FK
uuid mother_id FK
uuid father_id FK
text status
}
puppies {
uuid id PK
uuid breeder_id FK
uuid litter_id FK
uuid breed_id FK
text status
decimal price
}
inquiries {
uuid id PK
uuid buyer_id FK
uuid breeder_id FK
text status
decimal compatibility_score
}
payments {
uuid id PK
uuid inquiry_id FK
decimal amount
text status
}
subscriptions {
uuid id PK
uuid breeder_id FK
text tier
text status
}
club_users {
uuid id PK
uuid auth_uid
text email
}
club_memberships {
uuid id PK
uuid club_user_id FK
uuid club_id FK
text role
}
club_breeders {
uuid id PK
uuid club_membership_id FK
text kennel_name
}
club_dogs {
uuid id PK
uuid club_breeder_id FK
text registration_number
}
health_tests {
uuid id PK
uuid club_dog_id FK
text test_type
text result
}
Key Data Flows
How data moves through the system for core business processes.
🐕 Buyer Inquiry Flow
1
Buyer browses
puppies / litters → tracked in user_activities↓
2
Sends inquiry →
inquiries + inquiry_preferences created↓
3
Chat begins →
inquiry_messages >(with optional AI auto-response from breeder_faqs)↓
4
Status changes tracked in
inquiry_status_history↓
5
If approved →
payments → reservations → dog_ownership_records🏠 Breeder Onboarding
1
Sign up →
users >(user_type = 'breeder')↓
2
Complete profile →
breeder_profiles >(9-step onboarding)↓
3
Register breeds →
breeder_breeds + breeder_clubs↓
4
Compliance checks →
breeder_compliance_steps↓
5
Subscription →
subscriptions + stripe_connect_accounts↓
6
Add dogs →
dogs → Create litters → List puppies💳 Payment Flow
1
Inquiry status → 'reserviert'
↓
2
>Deposit request created →
payments >(type = 'reservation_deposit')↓
3
Stripe checkout → webhook →
webhook_events >(idempotent)↓
4
Payment confirmed →
reservations >created with confirmation number↓
5
On pickup →
dog_ownership_records + puppies.status → 'sold'⚖️ Moderation Flow
1
>Buyer reports breeder →
platform_reports↓
2
Admin reviews → valid/invalid
↓
3
>If valid → strike issued →
breeder_violations >(1=warning, 2=suspension, 3=ban)↓
4
If suspended →
breeder_profiles.suspended_until set