Introduction
Capstone #1: build ShopNest Blog end-to-end — posts, categories, tags, comments, admin CRUD, Identity, TinyMCE, SEO URLs, RSS, and Azure deploy. This ties together Articles 1–12 and 29.
After this article you will
- Scaffold Blog domain with EF Core migrations
- Admin area with Identity + CRUD
- TinyMCE + image upload for thumbnails
- SEO slug routes and paginated archive
- RSS feed and Azure App Service deploy
Prerequisites
- Article 64 — Secrets Management
- Articles 1–64 ShopNest foundations (MVC, EF Core, API, auth, deploy)
Architecture & design
Entities: Post, Category, Tag, Comment, PostTag (M:N). Areas/Admin for management. Public routes: /blog/{year}/{slug} from Article 6.
public class Post
{
public int Id { get; set; }
public string Title { get; set; } = "";
public string Slug { get; set; } = "";
public string BodyHtml { get; set; } = "";
public DateTime PublishedAt { get; set; }
public int CategoryId { get; set; }
public Category Category { get; set; }
public ICollection<Comment> Comments { get; set; } = new List<Comment>();
}Hands-on build guide — ShopNest Full Blog with Admin Panel
- Create ShopNest.Blog MVC project; EF migrations.
- Scaffold Identity in Admin area.
- PostsController CRUD + TinyMCE in Create/Edit views.
- IFormFile thumbnail → wwwroot/uploads.
- RssController returns application/rss+xml.
- Paginated Index: 10 posts per page.
- Publish to Azure App Service (Article 61).
Common pitfalls
- AllowAnonymous missing on public posts — forces login for readers.
- Html.Raw on comments without sanitization — XSS risk.
Interview & portfolio questions
Q: How SEO URLs?
A: Slug + date in route; unique index on Slug.
Summary
- Full MVC capstone integrating routing, EF, Identity
- Admin vs public separation via Areas
- RSS + pagination = portfolio-ready blog
Previous: Secrets Management
Next: E-Commerce Product Catalog API
FAQ
TinyMCE free?
Yes for basic rich text; CDN script in Admin layout.
Comments moderation?
Add IsApproved flag; admin approves before public display.