Skip to content

🎀πŸ”₯ 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#):

csharp
// πŸ’ͺ 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):

tsx
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

csharp
// ❌ Try to modify this? KNOW YOUR ROLE!
public bool IsAdminRole { get; set; }

Rule #3: Explicit Mutability

csharp
// βœ… The People's Elbow Drop of Mutability
[Mutable] public int InitialCount { get; set; }

Rule #4: TypeScript Enforces at Compile Time

tsx
// ❌ 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:

bash
dotnet add package Minimact.AspNetCore.Mvc

Client Side:

bash
npm install @minimact/mvc

Configuration ​

Startup.cs:

csharp
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:

csharp
public class CounterViewModel
{
    [Mutable] public int InitialCount { get; set; }
}

2. Create the Controller:

csharp
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:

tsx
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.

Released under the MIT License.