I've been working on a large marketing portal system for the last few months, and this evening I was able to splice off a chunk of the techology developed, and apply it to my own personal projects - specifically my own personal website. My website was created in a matter of a few hours almost three years ago, and was in much need of a framework upgrade. My original need for a website was simply to show my resume when job-hunting, and share some photos with my family and friends. Now my needs have changed, and I really needed a way to demo code and project progress to current clients, write programming-related articles, securely send files to clients and friends, among other things.
I started by implementing a fully dynamic content management solution, utilizing some HTTPModules I have developed as well as a new URL re-writing class, and a new WYSIWYG editor (www.dart.com) control I happened across recently. The end result is that most of the pages on my website are now driven from one generic content-serving page called "Display.aspx". The content system consists of an HTTPModule which resides between the website and IIS which intercepts all client requests. Any page requests are passed through a filter which matches them against the database. If a dynamic page exists in the database with the requested name, the client's URL is re-written to the name of the dynamic page, and the client is re-directed to the Display.aspx content-serving page. The client (or search engine) has no idea it is requesting the same physical page each time with a querystring parameter, it just assumes it is really on "NewsNewPersonalWebsite.aspx" (for example). Display.aspx also detects if a search engine is indexing the website and serves up some custom content to supplement the per-page meta tags (to make the pages even more friendly for indexing).
I also implemented an advanced role-based security system, allowing me to add products, users, roles and role permissions, and completely control the access to my members area. This enables me to extend my website into an actual portal, serving content based on the current logged-in user or security attribute they possess. This was essential for exposing my project tracker app, which is a simple application for logging and tracking development time spent on client projects.
Other features I added which I will be posting individual articles on soon:
- Comprehensive Visitor Logging System, which consists of a base page class that does per-page logging for detailed per-page analysis, and an HTTPModule which handles all raw request and referrer logging.
- Comprehensive Error Logging System which logs all errors, intelligently redirects the client (based on error) and depending on error type and description, will email or even page a website administrator.
- New File Manager which can announce and securely deliver files to members and other users.
- New Photo Gallery manager which has two modes: file-system driven or database-driven.
- New Menu Manager which controls the menu type, layout, links, descriptions and display order. Uses nested repeaters and is very thin to implement.
- New Multi-threaded, Service-based Mailing System which allows for creating and scheduling mailing jobs, which are then picked up at intervals by a Windows Service, sent and logged.