Rich software payloads from complex forms
Server-side normalization of stringified JSON arrays and booleans before validation on create and update.
Case study
B2B SaaS Discovery Marketplace
saasadvisoryhub.com
Product preview
Architected SaaS Advisory Hub — a B2B marketplace with NestJS and Prisma on PostgreSQL, Meilisearch discovery, dual Next.js apps, a vendor moderation pipeline, rich software and service catalogs, G2-style reviews, compare UX, cloud media uploads, Google OAuth, and Docker deployment on a shared platform edge at saasadvisoryhub.com.
Problem & goal
Buyers struggle to evaluate SaaS tools and service agencies from scattered vendor sites. Vendors need a structured marketplace to publish rich listings, collect reviews, and drive affiliate traffic — with editorial control so low-quality or unverified content does not pollute discovery.
SaaS Advisory Hub operates a three-sided content marketplace: buyers discover and compare software and services, vendors manage businesses and listings through a dedicated portal, and platform admins approve listings, reviews, vendors, and editorial blog content.
Target users
Buyers — browse categories, search, compare software and services, and submit structured reviews
Vendors — register, get approved, and manage business profiles plus software and service listings
Platform admins — moderation queue, category management, blog CMS, and user and vendor administration
Core capabilities
Email and password login, Google OAuth with account-type routing, email verification, and secure session management.
Rich product pages with pricing plans, mobile apps, FAQs, competitors, integrations, and affiliate links.
Agency profiles with industry focus, hourly rates, certifications, and capability matrices.
Meilisearch-powered global search combined with PostgreSQL filters for category and facet browsing.
Side-by-side software and service comparison with shareable links for buyer research.
G2-style structured reviews with multi-dimensional ratings, pros and cons, and admin approval.
Dashboard, business CRUD, and multi-section listing wizards for software and services.
Dashboard KPIs, moderation workflows, blog management, and user and vendor administration.
Sectioned posts with tags, SEO metadata, analytics, and search index sync on publish.
Authenticated cloud storage uploads with ownership validation before listing creation.
High-level design
The platform ships as three deployable applications: a Next.js public app for discovery, compare, blog, and vendor portal routes; a Next.js admin console on a separate subdomain; and a NestJS API handling versioned REST endpoints. PostgreSQL is the authoritative data store with Prisma. Meilisearch indexes denormalized documents for software, services, categories, and blogs synced on create, update, and publish. Customer and admin frontends proxy API requests same-origin in production.
External integrations include DigitalOcean Spaces for media, Resend for transactional email, and Google OAuth. Listings, reviews, and vendors default to a pending state until admin approval — public queries filter approved and active content only. Secure authentication with role-based access, authenticated media uploads with ownership validation, and throttled auth endpoints protect platform integrity.
Production stack
Dual-store pattern
Dedicated indexes for software, services, categories, blogs, users, and roles with filterable attributes configured at bootstrap.
Create and update operations flatten relational data into denormalized search documents with error logging on sync failure.
Parallel Meilisearch queries merge software, category, and service hits with PostgreSQL counts for unified results.
Service industry types surface as virtual category entries when not yet mapped to the software taxonomy.
Editorial control
Rich payloads covering deployment type, feature flags, pricing plans, competitors, webinars, resources, and affiliate links.
Agency metadata with company type, industry, locations, project sizing, and nested capability focus matrices.
Vendor submissions enter pending state; admin approve or reject with reason before public catalog visibility.
Non-rejected vendor edits reset listings to pending for admin review before changes go live.
Buyer research
Organization, job title, usage duration, multi-dimensional ratings, pros and cons, and likelihood to recommend.
Reviews default to pending; approved reviews recompute average rating and total count on parent listings.
Compare context syncs with URL parameters for software and service entities with shareable compare links.
Compare views fetch listing detail and approved reviews per item through shared listing components.
Listing management
Stats on listings by status, ratings, and activity trends with role-gated portal access after admin approval.
Business CRUD with proof upload; services require an approved parent business before creation.
Multi-section create and edit forms for software and service listings with URL-based media references.
Admin sectioned posts with tags, SEO meta, featured images, and Meilisearch sync when published.
Marketplace economics
Vendors configure outbound affiliate URLs and commission on software listings with disclosure on the frontend.
Featured and verified flags on catalog entities for editorial promotion of quality listings.
Schema support for paid vendor tiers tracked in admin KPIs — in-app subscription checkout planned for a future phase.
Challenges solved
Server-side normalization of stringified JSON arrays and booleans before validation on create and update.
Virtual categories in global search merge service industry types with the software taxonomy.
Authenticated upload with user-scoped storage keys and ownership validation on listing create.
Admin approval pipeline with aggregate ratings computed only from approved reviews.
Non-rejected listing edits automatically return to pending for admin review.
Google OAuth with signed state carrying intent and account type for customer vs vendor flows.
Dual-store pattern with Meilisearch sync on every write and filter configuration on service bootstrap.
Built for production load
Meilisearch full-text search avoids heavy PostgreSQL pattern matching on discovery queries
Parallel search queries in global search endpoint for sub-second unified results
Denormalized index documents avoid joins at search time
Stateless API scales horizontally behind shared platform edge nginx
Cloud object storage offloads binary media traffic from API containers
Same-origin API proxy in frontends eliminates CORS preflight on read requests
Pagination utilities on list endpoints for admin and catalog browsing
Operations
The production stack runs in Docker containers — database, Meilisearch, API, public app, and admin console — on a shared platform edge network with automated TLS at saasadvisoryhub.com. Prisma migrations run on backend startup. Health checks on core services ensure reliable uptime for the discovery marketplace.
Roadmap
Lead capture API wired to software detail CTAs and vendor inbox
Affiliate click tracking on outbound link redirects
Paid vendor tier billing integration
Meilisearch replicas for high-availability search at scale
Review verification workflow with proof URL review queue
Buyer accounts with saved comparisons and listing follow alerts
AI-generated blog summaries for SEO at scale
Async search index queue decoupled from write path