Themelia (aka Nalarium.Web.Processing; historical) - now defunct project about drove me mad in 2008. It's the largest project I've ever worked on. It's ASP.NET on crack (a concept inspired by my collegue/mentor). I like to think of my ASP.NET MVP being my reward for this waste of time. I know how to design and build things, but I have ZERO clue how to do marketing, so I let it die.
Wonder how huge this project was? Go look: http://themeliapro.azurewebsites.net. Click on "Read documentation" on the left. All the docs are there. I didn't update all the images. Don't care. My goal was to reinvent web development in .NET. It was a success, but I didn't know what to do with it.
So... the most low-level component was the HTTP module: everything ran through a master HTTP module brain. You could define a website, then inherit one site from another (multi-tenancy through OOP XML config). You controlled your website via a surface area (i.e. white-listing): You controlled how you wanted your site to be accessed; locked down by default. Want /contact? Define it. It also ran off "web domains" (like app domains, but for your web site; think of lightweight virtual applications.) Then there was the component model (programmatic packages of stuff analagous to the following XML). It was crazy huge. I wanted to reinvent web development in .NET.
Just for fun, below was one website's config file:
View samples as ThemeliaProSamples.
<web.processing> <webDomains> <add default="/Page_/Home/Root.aspx" catchAllMode="RedirectToRoot"> <endpoints> <add text="purchase" type="Page" parameter="/Page_/Home/Purchase.aspx" /> <add text="howto" type="Page" parameter="/Page_/Home/HowTo.aspx" /> <!----> <add text="sample/" type="Sequence" parameter="{Sample}" /> <add text="account" type="Sequence" parameter="{Account}" /> <add text="license" type="Sequence" parameter="{License}" /> <add text="register" type="Sequence" parameter="{Register}" /> <add text="support" type="Sequence" parameter="{Contact}" /> <add text="problem" type="Sequence" parameter="{Contact}" /> <add text="contact" type="Sequence" parameter="{Contact}" /> <add text="verify" type="Sequence" parameter="{Verification}" /> <!----> <add text="license/info" type="Page" parameter="/Page_/License/Info.aspx" /> <add text="register/check" type="Registration" /> <add selector="EndsWith" text="emailsend/" type="EmailProcessing" /> </endpoints> <factories> <add type="NalariumWS.Web.Processing.HandlerFactory, NalariumWS.Web" /> </factories> <security defaultAccessMode="Allow" loginText="login" loginPage="/Page_/Security/Login.aspx" defaultLoggedInTarget="/" validatorType="NalariumWS.Web.Security.SecurityValidator, NalariumWS.Web"> <exceptions> <add key="account" /> <!--<add key="contact" />--> <add key="support" /> <add key="license" /> </exceptions> </security> </add> <add default="{Sample}" name="SimpleContent" path="sample/simplecontent"> <endpoints> <add text="process" type="NalariumWS.Web.DownloadHttpHandler, NalariumWS.Web"> <parameters> <add name="FilePath" value="C:\_REFERENCE\PUBLIC\JampadTechnologySimpleContentViewer.zip" /> <add name="OutputName" value="JampadTechnologySimpleContentViewer.zip" /> <add name="ContentType" value="application/zip" /> <add name="Size" value="31036" /> </parameters> </add> </endpoints> <!--<accessRules> <add type="HttpReferrer" text="{blank}" actionType="Write" parameter="" /> </accessRules>--> </add> <add default="/Page_/Home/Download.aspx" name="Download" path="download"> <endpoints> <add text="process" type="NalariumWS.Web.DownloadHttpHandler, NalariumWS.Web"> <parameters> <add name="FilePath" value="C:\_REFERENCE\RELEASE\Beta1\ThemeliaPro.Beta1.zip" /> <add name="OutputName" value="ThemeliaPro.Beta1.zip" /> <add name="ContentType" value="application/zip" /> <add name="Size" value="271509" /> </parameters> </add> <add type="File" text="source/lib/trace-latest.js"> <parameters> <add name="target" value="/Resource_/Source/Client/Lib/Trace-1.5.js" /> <add name="extra" value="text/javascript" /> </parameters> </add> </endpoints> <!--<accessRules> <add type="HttpReferrer" text="{blank}" actionType="Write" parameter="" /> </accessRules>--> </add> <add name="ImageRendering" path="image/render/download" default="{Handler NalariumWS.Web.TextRenderHttpHandler, NalariumWS.Web}"> <parameters> <add name="ImageName" value="NalariumWS.Web._RESOURCE.Image.Download.png" /> <add name="Text" value="Version 2.0 Beta 1" /> <add name="TextColor" value="#ffffff" /> <add name="TopPosition" value="32" /> <add name="LeftPosition" value="87" /> <add name="FontFamily" value="Calibri, Arial" /> <add name="FontSize" value="12" /> </parameters> <!--<accessRules> <add type="HttpReferrer" text="{blank}" actionType="Write" parameter="" /> </accessRules>--> </add> <add name="forum" path="forum" default="/Sequence_/Forum.aspx" catchAllMode="PassToDefault"> <components> <add type="Nalarium.Content.Processing.ContentComponent, Nalarium.Content"> <parameters> <add name="domainGuid" value="9A04ACDC-55B9-4085-9FAD-A913FBC29324" /> </parameters> </add> </components> <security defaultAccessMode="Block" loginText="login" loginPage="/Page_/Security/Login.aspx" defaultLoggedInTarget="/forum/" validatorType="NalariumWS.Web.Security.SecurityValidator, NalariumWS.Web" /> </add> <add name="blog" path="blog" default="{Blog}" catchAllMode="PassToDefault"> <!--<components> <add type="Jampad.SimpleContent.Processing.ContentComponent, Jampad.SimpleContent"> <parameters> <add name="physicalFolder" value="{AppSetting docsPhysicalFolder}" /> </parameters> </add> </components>--> </add> <add name="docs" path="docs" default="{Documentation}" catchAllMode="PassToDefault"> <components> <add type="Jampad.SimpleContent.Processing.ContentComponent, Jampad.SimpleContent"> <parameters> <add name="physicalFolder" value="{AppSetting docsPhysicalFolder}" /> </parameters> </add> </components> </add> <add name="reference" path="reference" default="{Documentation}" catchAllMode="PassToDefault"> <!--<components> <add type="Jampad.SimpleContent.Processing.ContentComponent, Jampad.SimpleContent"> <parameters> <add name="physicalFolder" value="{AppSetting referencePhysicalFolder}" /> </parameters> </add> </components>--> </add> </webDomains> <!--<sequences> <add name="Register"> <views> <add name="Input" /> <add name="VerificationSent" /> <add name="VerificationSuccess" /> <add name="VerificationError" /> </views> </add> </sequences>--> </web.processing>