Welpenherz β The Company
Corporate structure, SKG strategy, and the vision behind the platform.
- Build club admin software as the entry point
- Win one Rasseklub as proof of concept
- Expand toward SKG partnership
- Unlock breeder supply and marketplace liquidity
- Replaces fragmented paper/email/Excel workflows
- Makes compliance visible and enforceable
- Uses existing breed regulations as operational engine
- Creates scalable club-network layer
- Improves trust and provenance for breeders
- Member directory and invitations
- Breeder oversight and role assignment
- Litter registration oversight
- Reports and statistics
- 112 SKG clubs already seeded in database
- Health-test verification queue
- Litter-registration review queue
- Whelping-report review queue
- Breeder compliance overview
- Breed-wide eligibility matrix
- Decision history and audit trail
club_usersβ independent club identityclub_membershipsβ roles: admin, zuchtwart, memberclub_breedersβ bridge to welpenmatch_profile_idclub_dogsβ club-registered breeding dogshealth_testsβ per-dog, with certificate trackinglitter_registrationsβ compliance-check pipelinewhelping_reportsβ post-birth reporting + SKG reference
| Surface | Domain | Purpose |
|---|---|---|
| Marketplace | welpenmatch.ch | Public marketplace for buyers and breeders |
| Breeder Portal | welpenmatch.ch/portal | Full breeder operating system (19 sub-routes) |
| Breeder Sites | {slug}.welpenmatch.ch | Premium breeder mini-websites with inline editing |
| Club Admin | clubs.welpenmatch.ch | Breed club administration |
| Zuchtwart | zuchtwart.welpenmatch.ch | Breed warden compliance tools |
Interactive presentation covering the Welpenherz ecosystem, regulatory waterfall, and anti-puppy-trade strategy. Features clickable stakeholder diagram with 3 views.
Open Full Pitch DeckWelpenmatch β The Product
Features, subscription tiers, trust system, and the full product scope.
- Browse/search puppies, litters, breeders, dogs
- Create lifestyle/preference profile
- Get AI breed and puppy recommendations
- Send breeder inquiries, join waitlists
- Favorite breeders/litters/puppies/dogs
- 8-step onboarding: welcome, profile, lifestyle, quiz, preferences, contact, review, finish
- Everything buyers can do, plus:
- Manage public breeder profile
- Manage dogs, puppies, and litters
- Manage inquiries, waitlists, reservations
- AI-assisted bios, replies, communications
- Blog posts, document vault, pedigree management
- 9-step onboarding with autosave and validation
- Everything breeders can do, plus:
- Manage users and content platform-wide
- Verify breeders and moderate reviews
- Inspect platform statistics
- RLS/debugging tools
- Existing 8-tab breeder profile
- Hardcoded layout from breeder profile data
- All core marketplace features
- Full website builder with templates and sections
- AI content prefill and per-section regeneration
- Media manager and custom pages
- Wildcard subdomain: {slug}.welpenmatch.ch
- Optional custom domain
- 6 themes: classic, modern, warm, elegant, natural, minimal
- 10 page templates across 8 page types
| Badge | Condition |
|---|---|
| skg_verified | verification_status = verified OR skg_member = true |
| premium | subscription_tier = premium |
| secure_payment | payments_enabled = true (Stripe Connect active) |
| rehoming_guaranteed | Always granted β platform-wide guarantee |
| Strike | Action |
|---|---|
| 1st (0 prior) | Warning |
| 2nd (1 prior) | 30-day suspension |
| 3rd+ (2+ prior) | Permanent ban (suspended_until = 2099) |
- Breed matching: top breed recommendations with match scores
- Puppy matching: top puppy matches from buyer profile
- Lifestyle assessment chatbot: 3-4 conversational questions
- Bio writer: generates warm, professional German bios
- Profile chat: answers only from breeder-provided data
- Inquiry response generator with confidence scores
- Breed translation: English to German content
- Site builder AI prefill (5/day) and per-section regenerate (20/day)
- Search puppies, breeders, litters, breeding dogs
- Algolia-powered with denormalized breeder info in puppy index
- Facets: availability, breed, price, location, canton
- Predictive breed suggestions and real-time results
- Inquiry lifecycle: open, weitere_angaben, warteliste, abgelehnt, reserviert, abgeschlossen
- Real-time Supabase chat with text/image/document messages
- AI auto-response when confidence > 0.7
- Compatibility scoring (0-1), waitlist ranking
- Hunde A-Z breed profiles
- Canton-specific information for all 26 cantons
- Glossary, FAQ, purchase guidance, starter kit
- Laws/rules, breeder guidance, legal knowledge
- Registry-based section/template architecture
- 8 section types: hero, intro, rich-text, puppies grid, contact form, reviews, contact info, map
- Inline editing: InlineText, InlineRichText, InlineImage, InlineVideo
- Auto-save (2s debounce), publish/unpublish, AI regenerate
- Dual rendering: embedded in marketplace + standalone on subdomain
Codebase
Tech stack, architecture decisions, routes, database, and APIs.
| Layer | Technology | Notes |
|---|---|---|
| Framework | Next.js 15 + React 19 | App Router, Server Components by default |
| Language | TypeScript (strict) | No any, no ignored build errors, Zod as source of truth |
| Database | Supabase (PostgreSQL) | RLS, repository pattern, soft deletes |
| Styling | Tailwind CSS + Shadcn/ui | Radix primitives, Alegreya + Belleza fonts |
| AI | Google Genkit + Gemini 2.0 Flash | German prompts, structured output |
| Search | Algolia | Faceted search, real-time suggestions |
| Payments | Stripe (Connect + Subscriptions) | Destination charges, CHF, card + TWINT |
| Resend + React Email | 12 templates, 4 languages (de/fr/it/en) | |
| Hosting | Vercel | SSR for SEO, preview deploys |
- Server Components by default, Server Actions for mutations
- Repository pattern for all data access
- Zod as source of truth for validation and types
- No any types, no ignored build errors, no console.log
- Feature-based directory structure
- Route-level error boundaries
- Env-gated logging only
- Business-logic tests required
- Husky pre-commit: typecheck + lint
| Table | Purpose | Key Fields |
|---|---|---|
users | Master user record (breeder/buyer/admin) | auth_uid, email, user_type |
breeder_profiles | Extended breeder public profile | slug, verification_status, onboarding_step |
buyer_profiles | Buyer lifestyle/preferences | housing_type, dog_experience_level, max_price |
dogs | Breeding dogs | breed_id, breeding_status, health_tests (JSONB) |
litters | Litter lifecycle | status (planned/pregnant/born/ready/closed) |
puppies | Individual puppy listings | status (available/reserved/sold/keeping), price CHF |
applications | Buyer applications for puppies/litters/rehoming | application_type, status, questionnaire_answers |
chat_rooms / messages | Direct messaging with attachments | context_type (general/application/puppy_inquiry) |
dog_breeds | Breed catalog with 30+ characteristics | size_category, energy_level, trainability (1-5 scales) |
reviews | Buyer reviews of breeders | overall_rating, communication_rating, puppy_health_rating |
waitlists | Per-litter queue | status (active/offered/accepted/declined/expired) |
| Route | Purpose |
|---|---|
/portal/uebersicht | Dashboard with stats, activity feed, compliance progress |
/portal/profil | Public breeder profile editor + preview, QR code, subdomain |
/portal/einstellungen | Account, notifications, privacy, language, FAQ, waitlist settings |
/portal/einrichtung | New breeder setup wizard |
/portal/meine-zucht | Breeds, clubs, regulations, health requirements |
/portal/hunde | Breeding dog management |
/portal/wurfplanung | Litter management, puppy workflows, heat tracking, stud search |
/portal/warteliste | Waitlist and application prioritization |
/portal/nachrichten | Full-height messaging hub |
/portal/seiten | Breeder website builder and page management |
/portal/blog | Blog content management |
/portal/dokumente | Document vault (PDF/JPG/PNG/WebP, max 10MB) |
/portal/abo | Subscription management and pricing |
/portal/rasseclub | Club directory and upcoming events |
/portal/shop | Curated breeder shop / affiliate products |
/portal/stammbaum | Pedigree tree management (3 generations) |
/portal/zahlungen | Stripe Connect onboarding and status |
/portal/zahlungen/auszahlungen | Payouts dashboard |
POST /api/stripe/payments/create-depositβ Creates reservation depositPOST /api/stripe/payments/create-finalβ Creates final balance payment
POST /api/stripe/connect/create-accountβ Onboard breederGET /api/stripe/connect/returnβ OAuth return handlerGET /api/stripe/connect/refreshβ Refresh onboarding linkGET /api/stripe/connect/balanceβ Fetch breeder balanceGET /api/stripe/connect/payoutsβ Payout history
POST /api/stripe/subscriptions/create-checkoutβ Premium checkoutPOST /api/stripe/subscriptions/portalβ Billing portalPOST /api/webhooks/stripeβ Stripe events webhook
GET /api/breeder-site/[id]/profileβ Public profileGET /api/breeder-site/[id]/dogsβ DogsGET /api/breeder-site/[id]/littersβ LittersGET /api/breeder-site/[id]/puppiesβ PuppiesGET /api/breeder-site/[id]/blogβ BlogGET /api/breeder-site/[id]/reviewsβ Reviews
GET/POST /api/breeder-site/configβ Site configGET/POST /api/breeder-site/pagesβ Pages CRUDPATCH /api/breeder-site/pages/[id]β Save pagePOST /api/breeder-site/pages/[id]/publishβ PublishPOST /api/breeder-site/ai/prefillβ AI prefillPOST /api/breeder-site/ai/regenerateβ AI regen
POST /api/breeder-site/mediaβ Upload mediaDELETE /api/breeder-site/media/[id]β Delete mediaPOST /api/breeder-site/anonymous-leadβ Anonymous lead
POST /api/clubs/authβ Club loginGET/POST /api/clubs/membersβ MembersPATCH /api/clubs/members/[id]β Update memberPOST /api/clubs/invite/acceptβ Accept invite
GET /api/cron/review-remindersβ Daily review remindersGET /api/cron/newsletterβ Weekly newsletterGET /api/cron/daily-digestβ Daily digestPOST /api/breed-notifications/triggerβ Breed alertsPOST /api/webhooks/user-createdβ User created hook
POST /api/images/uploadβ Image optimization uploadGET /api/searchβ Search proxyPOST /api/emails/sendβ Email sendGET /api/emails/unsubscribeβ UnsubscribePOST /api/auth/setup-breederβ Setup breederPOST /api/reportsβ Content reportsPOST /api/consent/recordβ Consent logging
Edge functions are thin dispatchers β they handle Supabase real-time triggers and route to the Next.js API for rendering/sending.
| Function | Trigger | Purpose |
|---|---|---|
handle-inquiry | DB insert: inquiries | New inquiry processing + breeder notification |
notify-new-message | DB insert: messages | New message email + Telegram notification |
toggle-favorite | HTTP POST | Toggle favorites (4 entity types) |
get-favorites | HTTP GET | Fetch user's favorites |
get-activity | HTTP GET | Breeder activity feed |
track-view | HTTP POST | View analytics tracking |
track-interaction | HTTP POST | Interaction event tracking |
telegram-webhook | HTTP POST: Telegram | Internal voice/task ops bot |
Provider: Resend. Sender: WelpenMatch <noreply@welpenmatch.ch>. 4 languages (de/fr/it/en). Batch: 50 per batch, 500ms delay.
| Template | Type | Status | Trigger | Recipients |
|---|---|---|---|---|
welcome | Transactional | Live | user-created webhook | New buyer / breeder |
email_verification | Transactional | Scaffolded | Auth flow (TBD) | Registering user |
new_inquiry | Transactional | Live | InquiryRepository.create() | Breeder |
new_message | Transactional | Live | notify-new-message edge fn | Message recipient |
inquiry_status_change | Transactional | Live | updateStatus() | Buyer |
reservation_confirmation | Transactional | Live | After reservation | Buyer + Breeder |
auto_rejection | Transactional | Live | Auto-reject rules | Buyer |
litter_assignment | Transactional | Live | Litter waitlist add | Buyer |
new_litter_announcement | Marketing | Live | Breed subscription trigger | Breed subscribers |
blog_newsletter_digest | Marketing | Live | Weekly cron | Newsletter subscribers |
review_reminder | Marketing | Live | Daily cron (14d post-pickup) | Buyer |
post_purchase_welcome | Transactional | Orphaned | Not wired | Buyer (intended) |
Marketing emails include unsubscribe links. post_purchase_welcome exists but has no trigger yet.
External Services
Third-party integrations and how they connect to the platform.
- PostgreSQL database with Row Level Security
- Auth (email/password + Google OAuth)
- Realtime for chat messages
- Storage for images, documents, media
- Image transformations (replacing Vercel optimizer)
- Edge functions for event triggers
- Generated TypeScript types from schema
- Stripe Connect (Standard) for breeder payouts
- Destination charges: platform fee + transfer to breeder
- Two-stage payments: reservation deposit + final payment
- Subscriptions via Checkout Sessions
- Billing portal for payment management
- Webhook handling with idempotency
- Payment methods: card + TWINT
- API version pinned to 2026-03-25.dahlia
- Transactional and marketing email delivery
- Sender: WelpenMatch <noreply@welpenmatch.ch>
- 12 React Email templates (11 active, 1 orphaned)
- 4 languages: de, fr, it, en
- Batch sending: 50 per batch, 500ms delay
- Unsubscribe support for 3 marketing email types
- Google Genkit + Gemini 2.0 Flash for core AI
- All prompts are in German
- Breed matching, puppy matching, lifestyle chatbot
- Breeder bio writer, inquiry response generator
- Site builder AI prefill and per-section regenerate
- Auto-response triggers only when confidence > 0.7
- Parallel notification channel for breeders
- New inquiry alerts
- New message notifications
- Litter announcement notifications
- Voice task capture for internal ops
- Production hosting with SSR
- Preview deploys for every PR
- CI/CD pipeline
- Custom domain routing via rewrites
- Image optimization being moved to Supabase
- Puppy search index with denormalized breeder data
- Searchable: name, breed, description
- Facets: availability, breed, price
- Real-time suggestions and pagination
Flows
User journeys, payment flows, onboarding processes, and trust computation.
| Component | Amount |
|---|---|
| Breeder price | CHF 3,000 |
| Platform fee (5%) | CHF 150 |
| Stripe fee (~2.9% + 30 Rp) | CHF 95 |
| Buyer total | CHF 3,245 |
| Breeder payout | CHF 3,000 |
- welcome β on user creation
- email_verification β account verification
- new_inquiry β to breeder when buyer inquires
- new_message β new chat message notification
- inquiry_status_change β to buyer when status changes
- reservation_confirmation β to both buyer and breeder
- auto_rejection β to buyer on automated rejection
- litter_assignment β to buyer when assigned to waitlist
- blog_newsletter_digest β weekly cron, batches of 50
- new_litter_announcement β breed-subscription triggered
- review_reminder β daily cron, 14 days after pickup
All marketing emails include unsubscribe links via email_subscriptions table.
- Breed restrictions: 7 legal statuses (banned to allowed)
- Blood-percentage thresholds for mixed breeds
- Training requirements: theory, practical, exams, deadlines
- General regulations: insurance, registration, tax, leash laws
- Restricted areas: seasonal, time-based, with fine amounts
- All 26 cantons in schema, Zurich fully seeded
- banned β Fully prohibited
- banned_new β No new acquisitions
- restricted_permit β Permit required
- restricted_muzzle β Muzzle obligation
- restricted_leash β Leash obligation
- monitored β Under observation
- allowed β No restrictions
Business Purpose
The problem, value propositions, revenue model, moat, and strategy.
- Swiss puppy buyers have no reliable way to find verified, responsible breeders
- Existing platforms (tutti.ch, Facebook groups) have no trust verification or compliance checks
- Breed clubs run on paper, email, and Excel β no digital compliance infrastructure
- Swiss cantonal dog law is complex and fragmented across 26 cantons
- Breeders lack professional tools for managing inquiries, waitlists, and operations
- AI-powered breed and puppy matching based on lifestyle
- Verified breeders with trust badges and SKG certification
- Secure on-platform payments with rehoming guarantee
- Canton-specific legal information and compliance awareness
- Comprehensive education hub (Hundewelt)
- Full operating system: profile, dogs, litters, waitlists, chat, documents
- AI-assisted bios, responses, and content generation
- Premium website with custom subdomain and inline editing
- Stripe-powered payments with 100% of listed price received
- Compatibility scoring to prioritize quality buyer matches
- Digital replacement for paper/email/Excel workflows
- Structured health-test verification and litter registration
- Zuchtwart compliance review queues
- Auditable progression from breeder to litter to puppy records
- Scalable framework across 112 SKG clubs
| Stream | Model | Details |
|---|---|---|
| Transaction fees | 5% platform fee per payment | Charged on deposit + final payment, buyer covers it |
| Premium subscriptions | Monthly/annual SaaS | SupaZuechter: website builder, AI tools, custom domain |
| Affiliate shop | Commission | Curated breeder products with outbound affiliate CTAs |
- Swiss cantonal regulation system β deep compliance knowledge across 26 cantons
- Breed club admin tools β operational lock-in with Rasseklubs and Zuchtwarte
- Breeder operating system β switching cost via data, workflows, and website
- Trust verification pipeline β SKG, health tests, compliance badges
- AI features grounded in domain-specific Swiss breeding data
- Network effects: breeders attract buyers, buyers attract breeders
- Phase 1: Consumer marketplace for buyers and breeders
- Phase 2: Operational tooling for breeders (portal, site builder, AI)
- Phase 3: Compliance/admin tooling for breed clubs
- Phase 4: SKG partnership and ecosystem integration
| Area | Status | Details |
|---|---|---|
| Core platform | Done | Next.js 15 / React 19 / TypeScript / Supabase schema deployed |
| Auth + onboarding | Done | 9-step breeder + 8-step buyer onboarding, autosave |
| Breeder portal | Done | 19 portal routes β full breeder OS |
| Marketplace | Done | Search, listings, inquiry lifecycle, chat |
| AI features | Done | Breed/puppy matching, bio writer, response AI |
| Payments | Done | Stripe Connect, subscriptions, two-stage payments |
| Email system | Done | 11 live templates via Resend, 4 languages |
| Cantonal system | Done | 26 cantons in schema, sellability checks |
| Breeder site builder | In Progress | Registry-based builder, inline editing, AI prefill |
| Club admin tools | In Progress | Schema done, Phase 1 auth + member layer underway |
| Image optimization | In Progress | Supabase transforms replacing Vercel optimizer |
| 108 SKG clubs seeded | Done | 108 clubs + ZAR data in DB |
- Finalize site builder β launch Premium tier
- Club admin: auth + member layer
- Health test verification queue
- Litter registration pipeline
- Wire email_verification trigger
- post_purchase_welcome integration
- Security hardening
- Supabase image optimization rollout
- Full Zuchtwart app at zuchtwart.welpenmatch.ch
- Whelping report workflow
- Compliance overview + eligibility matrix
- Decision audit trail
- clubs.welpenmatch.ch full rollout
- Win first Rasseklub as reference
- Prepare SKG partnership pitch
- SKG partnership + official endorsement
- Unlock breeder supply at scale
- Expand to AT/DE market
- FCI import/export compliance tools
- Vet data integration
- AI regulation updates (dictate β ZAR)
- AMICUS registry integration
- Lighthouse score > 90
- Core Web Vitals compliance
- WebP/responsive image optimization
- SSR for SEO-critical pages
- RLS on all database tables
- Server-side auth validation
- Signup rate limits by IP/email
- Centralized HTML sanitization (isomorphic-dompurify)
- Soft deletes, no sensitive data in URLs
- German/de_CH metadata, Open Graph, Schema.org
- Sitemap, clean breeder slugs
- Responsive: mobile 375px, tablet 768px, desktop 1280px+
- Privacy: configurable retention (default 365d), marketing opt-in