π€π₯ CAN YOU SMELLLLLLL... WHAT THE MINIMAC'T... IS RENDERING!! π₯π€ β
π THE PEOPLE'S FRAMEWORK HAS ARRIVED π β
IT DOESN'T MATTER what your stack was before!
IT DOESN'T MATTER if you're knee-deep in Razor views!
IT DOESN'T MATTER if your controllers are older than your junior devs!
Because FINALLY... FINALLY... The Minimac't MVC Bridge has come back... to ASP.NET!
π BY THE NUMBERS β
- β‘ 0ms perceived latency (if ya smell what the cache is hitting)
- π― 96% - 98% prediction accuracy (know your role)
- π¦ 12.01 KB runtime (stripped down, lean, and MEAN)
- π 100% server-authoritative security (locked down tighter than a figure-four leglock)
- π° 5x memory reduction vs. the candy-ass competition
- π The Rock's Rating: CHAMPION (vs. all the jabronis)
π₯ LAYING THE SMAC'T DOWN - THE FOUR ROUNDS β
Round 1 - MVC Developer: "But my controllers..." β Minimac't: "KEEP 'EM!"
Round 2 - React Fan: "But hydration..." β Minimac't: "0ms PATCHES!"
Round 3 - Angular Dev: "500KB bundle..." β Minimac't: "12.01 KB. BOOM!"
Round 4 - Next.js: "Server components..." β Minimac't: "RUST RECONCILIATION! πͺ¨π₯"
THE SMAC'T DOWN IS COMPLETE! π₯ β
π₯ THE JABRONI-BEATING... β
LAY-THE-SMACK-DOWN...
PIE-EATING...
TRAIL-BLAZING...
EYEBROW-RAISING...
ALL AROUND BEST-IN-THE-WORLD...
MVC BRIDGE FEATURE SET: β
Server Side (C#):
// πͺ The People's ViewModel
public class UserProfileViewModel
{
// π Know Your Role (Immutable - Server Authority)
public bool IsAdminRole { get; set; }
public string UserEmail { get; set; }
public decimal TaxRate { get; set; }
// πͺ The People's Mutable State
[Mutable] public int InitialCount { get; set; }
[Mutable] public string InitialSearchQuery { get; set; }
[Mutable] public bool InitialGiftWrap { get; set; }
}
// π― And SHUT YOUR MOUTH (Type Safe Controller)
public class ProfileController : Controller
{
public async Task<IActionResult> Index()
{
var viewModel = new UserProfileViewModel
{
IsAdminRole = User.IsInRole("Admin"),
UserEmail = User.Identity?.Name,
InitialCount = 1,
InitialSearchQuery = ""
};
// π₯ THE MOST ELECTRIFYING RENDER IN SPORTS ENTERTAINMENT
return await RenderMinimact<UserProfile>(viewModel);
}
}Client Side (TypeScript):
import { useMvcState, useMvcViewModel } from '@minimact/mvc';
export function UserProfile() {
// β‘ THE MOST ELECTRIFYING HOOK IN SPORTS ENTERTAINMENT
const [count, setCount] = useMvcState<number>('initialCount');
const [searchQuery, setSearchQuery] = useMvcState<string>('initialSearchQuery');
// π Read-Only (Server Authority - Know Your Role)
const [isAdmin] = useMvcState<boolean>('isAdminRole');
const [email] = useMvcState<string>('userEmail');
// π₯ IF YA SMELLLLL...
const viewModel = useMvcViewModel<UserProfileViewModel>();
return (
<div className="profile">
<h1>Welcome, {email}!</h1>
{/* πΈ WHAT THE PREDICTIVE PATCHES... ARE COOKIN'! */}
{isAdmin && (
<div className="admin-panel">
<h2>Admin Controls</h2>
<button>Delete User</button>
<button>Ban User</button>
</div>
)}
{/* πͺ Mutable State - The People's State! */}
<input
type="number"
value={count}
onChange={(e) => setCount(parseInt(e.target.value))}
/>
<input
type="text"
placeholder="Search..."
value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
/>
</div>
);
}π WHAT YOU GET: β
β Controllers β Keep 'em! (The Rock respects the classics)
β ViewModels β Still there! (if ya smell what the ViewModel is passin')
β Type Safety β C# to TypeScript! (stronger than a People's Elbow)
β Security β Server-authoritative! (locked down in the Sharpshooter)
β Reactivity β Zero-latency updates! (faster than a spinebuster)
β No Hydration β None! (The Rock says lay the smackdown on that bundle size!)
π₯ THE DATA FLOW β
MVC Controller (The Foundation)
β (prepares ViewModel - Know Your Role)
UserProfileViewModel
β (serialized to JSON - The People's JSON)
HTML Page with <script> tag
β (window.__MINIMACT_VIEWMODEL__ - Can You Smell It?)
useMvcState Hook
β (reactive state - The Most Electrifying State)
User Interaction
β (setCount() - Laying the Smackdown)
SignalR β Server
β (validation - If You're Not Down With That...)
Predictive Patches
β (0ms latency - BOOM!)
Updated DOMπ‘οΈ SECURITY MODEL β
The Rock's Rules of Security: β
Rule #1: Server is the PEOPLE'S CHAMPION
- Server decides what you can see
- Server validates what you can change
- Server controls the patches
Rule #2: Immutable by Default
// β Try to modify this? KNOW YOUR ROLE!
public bool IsAdminRole { get; set; }Rule #3: Explicit Mutability
// β
The People's Elbow Drop of Mutability
[Mutable] public int InitialCount { get; set; }Rule #4: TypeScript Enforces at Compile Time
// β TypeScript Compiler says: "SHUT YOUR MOUTH!"
const [isAdmin, setIsAdmin] = useMvcState<boolean>('isAdminRole');
// ^^^^^^^^^^
// Error: Tuple type '[boolean]' has no element at index 1
// β
THE PEOPLE'S STATE (Mutable)
const [count, setCount] = useMvcState<number>('initialCount');
// ^^^^^^^^ IT DOESN'T MATTER what you set it to!π GETTING STARTED β
Installation β
Server Side:
dotnet add package Minimact.AspNetCore.MvcClient Side:
npm install @minimact/mvcConfiguration β
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
services.AddMinimact();
services.AddMinimactMvc(); // π₯ THE BRIDGE!
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app)
{
app.UseMinimact();
app.UseRouting();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapHub<MinimactHub>("/minimact");
});
}Your First Component β
1. Create the ViewModel:
public class CounterViewModel
{
[Mutable] public int InitialCount { get; set; }
}2. Create the Controller:
public class CounterController : Controller
{
public async Task<IActionResult> Index()
{
var viewModel = new CounterViewModel { InitialCount = 0 };
return await this.RenderMinimact<CounterPage>(viewModel);
}
}3. Create the Component:
import { useMvcState } from '@minimact/mvc';
export function CounterPage() {
const [count, setCount] = useMvcState<number>('initialCount');
return (
<div>
<h1>Count: {count}</h1>
<button onClick={() => setCount(count + 1)}>
Increment
</button>
</div>
);
}4. IT DOESN'T MATTER IF IT'S YOUR FIRST TIME!
You just built a reactive, type-safe, server-validated, predictively-rendered counter.
WITH NO HYDRATION. WITH NO BLOAT. WITH NO JABRONI FRAMEWORKS.
π€ THE BOTTOM LINE... β
You wanted a bridge?
THE PEOPLE wanted a bridge?
Well, MINIMAC'T just built the GOLDEN GATE OF MVC BRIDGES!
And now...
The millions (AND MILLIONS) of ASP.NET developers can FINALLY...
FINALLY...
Walk that bridge from legacy MVC...
To REACTIVE GLORY! πβ‘
π£ TO ALL THE FRAMEWORKS OUT THERE... β
To React with your hydration bloat...
To Vue with your reactivity overhead...
To Angular with your... everything...
The Minimac't MVC Bridge has ONE THING to say:
KNOW YOUR ROLE... AND SHUT YOUR MOUTH! π€π₯ β
π NEXT STEPS β
π ACHIEVEMENTS UNLOCKED β
- β 3-Week Implementation (Completed ahead of schedule - The People's Pace)
- β 96KB Implementation Plan (More detailed than The Rock's eyebrow choreography)
- β Full Type Safety (C# β TypeScript - Stronger than a Rock Bottom)
- β Server Authority (Security tighter than The People's Elbow)
- β Predictive Rendering (Faster than you can smell what's cooking)
- β Production Ready (Battle-tested, jabroni-proof, MILLIONS-approved)
IF YA SMELL...
WHAT THE MINIMAC'T...
MVC BRIDGE...
IS COOKIN'!! π₯π₯π₯
πβ‘π»πΈπ₯
*drops mic*
*raises eyebrow*
*ships to production*
*mic breaks anyway*
THE PEOPLE'S FRAMEWORK IS HERE.
AND THAT'S THE BOTTOM LINE.
BECAUSE MINIMAC'T SAID SO. βπ₯
πππ LET'S GOOOOOOOO!!! πππ
Β© 2025 Minimac't. The Most Electrifying Framework in Web Development Entertainment.
