<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/scaling-to-100k-products-a-resilient-net-10-k8s-and-next-js-15-event-driven-architecture-w4juev2fb" -->

---
title: Scaling to 100k+ Products: A Resilient .NET 10, K8s, and...
description: A walkthrough of building a scalable marketplace application using .NET 10, Kubernetes (Minikube), and Next.js 15, targeting 100,000+ products. The...
canonical: https://daily.dev/posts/scaling-to-100k-products-a-resilient-net-10-k8s-and-next-js-15-event-driven-architecture-w4juev2fb
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Scaling to 100k+ Products: A Resilient .NET 10, K8s, and Next.js 15 Event-Driven Architecture | daily.dev
og:description: A walkthrough of building a scalable marketplace application using .NET 10, Kubernetes (Minikube), and Next.js 15, targeting 100,000+ products. The...
og:url: https://daily.dev/posts/scaling-to-100k-products-a-resilient-net-10-k8s-and-next-js-15-event-driven-architecture-w4juev2fb
og:image: https://api.daily.dev/og/posts/W4JuEV2fB.png
og:image:alt: Scaling to 100k+ Products: A Resilient .NET 10, K8s, and Next.js 15 Event-Driven Architecture
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Scaling to 100k+ Products: A Resilient .NET 10, K8s, and Next.js 15 Event-Driven Architecture

**[Medium](https://daily.dev/sources/medium_js)** · 6 min read · 17 upvotes · 0 comments

## Summary

A walkthrough of building a scalable marketplace application using .NET 10, Kubernetes (Minikube), and Next.js 15, targeting 100,000+ products. The architecture uses CQRS with MediatR, RabbitMQ via MassTransit for async messaging, PostgreSQL for transactional writes, and Elasticsearch for sub-25ms full-text search with multi-field boosting and dynamic facets. The post covers the write-to-search event flow, Elasticsearch query configuration with highlighting and aggregations, Next.js frontend integration with safe HTML injection and debounced search, and two infrastructure post-mortems: a WSL2 Apache port conflict blocking Minikube ingress, and purging accidentally committed credentials from Git history using filter-branch.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://medium.com/@mustafaoskay44/scaling-to-100k-products-a-resilient-net-10-k8s-and-next-js-15-event-driven-architecture-01fd59bc2ebb>

## Questions this post answers

### How do you fix a 404 with an Apache signature when exposing a Minikube cluster on localhost with WSL2?

The issue is usually a system-level Apache daemon inside the WSL2 host binding to port 80 before Minikube's bridge maps the Nginx Ingress Controller ports, hijacking traffic before it reaches the cluster. Stop the Apache service with sudo systemctl stop apache2, then restart Minikube with minikube start --driver=docker --ports=80:80,443:443 and reapply the Kubernetes manifests.

_daily.dev surfaces practical infra debugging fixes like this WSL2 and Minikube port conflict._

### How do I permanently remove a leaked credentials file from Git history, not just delete it in a new commit?

Deleting a file in a new commit does not remove it from Git's history graph, so anyone can still view it in past commits. Use git filter-branch with --index-filter to strip the file from every commit, run git reflog expire and git gc --prune=now --aggressive to purge dangling blobs, then force-push the rewritten history with git push origin master --force.

_developers cleaning up leaked secrets can find step-by-step fixes like this on daily.dev._

### How can I make Elasticsearch prioritize matches in a product name over its description?

Apply a higher boost factor to the name field than the description field in a bool query's should clause, for example boosting name matches at 3.0 versus description matches at 1.0 using the Elastic.Clients.Elasticsearch v8+ fluent API in .NET. This ranks documents with query term hits in the name field above those matching only in the description.

_engineers tuning search relevance can track Elasticsearch query patterns like this on daily.dev._

## Similar posts on daily.dev

- [Fluent Commerce Architecture: Building Scalable Event-Driven Systems](https://daily.dev/posts/fluent-commerce-architecture-building-scalable-event-driven-systems-zzt8juhkv) · Netguru · 0 upvotes · 0 comments
- [The System Design Behind My New SaaS](https://daily.dev/posts/the-system-design-behind-my-new-saas-n2rai39sp) · Milan Jovanović · 49 upvotes · 6 comments
- [How We Built a Real-Time Stock Pricing System at Scale](https://daily.dev/posts/how-we-built-a-real-time-stock-pricing-system-at-scale-enzk8krjp) · ITNEXT · 19 upvotes · 0 comments
- [Event-Driven Architecture in .NET Core Using RabbitMQ](https://daily.dev/posts/event-driven-architecture-in-net-core-using-rabbitmq-btcsrhdsv) · C\# Corner · 21 upvotes · 0 comments
- [Learning Back-End Stack and Architecture by Building a User Analytics platform](https://daily.dev/posts/learning-back-end-stack-and-architecture-by-building-a-user-analytics-platform-mrwdm6rnm) · iO tech\_hub · 18 upvotes · 0 comments

---

Tags: [#kubernetes](https://daily.dev/tags/kubernetes), [#architecture](https://daily.dev/tags/architecture), [#.net](https://daily.dev/tags/.net), [#elk](https://daily.dev/tags/elk)

[View this post on daily.dev](https://daily.dev/posts/scaling-to-100k-products-a-resilient-net-10-k8s-and-next-js-15-event-driven-architecture-w4juev2fb)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Scaling to 100k+ Products: A Resilient .NET 10, K8s, and Next.js 15 Event-Driven Architecture","url":"https://daily.dev/posts/scaling-to-100k-products-a-resilient-net-10-k8s-and-next-js-15-event-driven-architecture-w4juev2fb","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/scaling-to-100k-products-a-resilient-net-10-k8s-and-next-js-15-event-driven-architecture-w4juev2fb"},"datePublished":"2026-07-17T19:35:07.678Z","dateModified":"2026-09-14T07:14:18.555Z","description":"A walkthrough of building a scalable marketplace application using .NET 10, Kubernetes (Minikube), and Next.js 15, targeting 100,000+ products. The...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/87990a0e0a8d4f9e3b5e54fe0c46920b?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/87990a0e0a8d4f9e3b5e54fe0c46920b?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Medium","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Medium","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/medium","url":"https://daily.dev/sources/medium_js"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/scaling-to-100k-products-a-resilient-net-10-k8s-and-next-js-15-event-driven-architecture-w4juev2fb","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":17},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"kubernetes,architecture,.net,elk","timeRequired":"PT6M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Medium","item":"https://daily.dev/sources/medium_js"},{"@type":"ListItem","position":3,"name":"Scaling to 100k+ Products: A Resilient .NET 10, K8s, and Next.js 15 Event-Driven Architecture"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/scaling-to-100k-products-a-resilient-net-10-k8s-and-next-js-15-event-driven-architecture-w4juev2fb#faq","mainEntity":[{"@type":"Question","name":"How do you fix a 404 with an Apache signature when exposing a Minikube cluster on localhost with WSL2?","acceptedAnswer":{"@type":"Answer","text":"The issue is usually a system-level Apache daemon inside the WSL2 host binding to port 80 before Minikube's bridge maps the Nginx Ingress Controller ports, hijacking traffic before it reaches the cluster. Stop the Apache service with sudo systemctl stop apache2, then restart Minikube with minikube start --driver=docker --ports=80:80,443:443 and reapply the Kubernetes manifests. daily.dev surfaces practical infra debugging fixes like this WSL2 and Minikube port conflict."}},{"@type":"Question","name":"How do I permanently remove a leaked credentials file from Git history, not just delete it in a new commit?","acceptedAnswer":{"@type":"Answer","text":"Deleting a file in a new commit does not remove it from Git's history graph, so anyone can still view it in past commits. Use git filter-branch with --index-filter to strip the file from every commit, run git reflog expire and git gc --prune=now --aggressive to purge dangling blobs, then force-push the rewritten history with git push origin master --force. developers cleaning up leaked secrets can find step-by-step fixes like this on daily.dev."}},{"@type":"Question","name":"How can I make Elasticsearch prioritize matches in a product name over its description?","acceptedAnswer":{"@type":"Answer","text":"Apply a higher boost factor to the name field than the description field in a bool query's should clause, for example boosting name matches at 3.0 versus description matches at 1.0 using the Elastic.Clients.Elasticsearch v8+ fluent API in .NET. This ranks documents with query term hits in the name field above those matching only in the description. engineers tuning search relevance can track Elasticsearch query patterns like this on daily.dev."}}]}
```

