Privacy Policy

This Privacy Policy explains our policy regarding the privacy of information supplied by users or collected by us from users of this web site or from other third parties. Because we want to build users' trust and confidence in our privacy practices, we want to disclose them to you.

Changes in this Privacy Statement

If we decide to change our privacy policy, we will post those changes to this privacy statement, the home page, and other places we deem appropriate so that you are aware of what information we collect, how we use it, and under what circumstances, if any, we disclose it. We reserve the right to modify this privacy statement at any time, so please review it frequently. If we make material changes to this policy, we will notify you here, by email, or by means of a notice on our home page.

Registration Newsletter/ Frequency of Mailings

By registering to our newsletter, you are agreeing to receive our newsletters on a daily basis. has the right to change frequency of delivery of its newsletters without notice.

Collection and Use of information

We respect your right to privacy. received your information from your submission to us or through one of our affiliates. is the owner of the information that you provided in any registration process. Your email address and any other identifying information that you give us will not be revealed to any third party, including any of the direct marketers who may use us to pass offers to you.

We use the information that you provided primarily to send you our newsletters. Moreover, the information subscribers give us is sometimes used to send prizes, verify legal age, and to send third-party mailings based on the interests that each individual subscriber has opted-in for. We may also collect and report to third parties (such as affiliates, content and service providers, and advertisers) aggregated information from our web site. For example, we may aggregate and report to third parties that X people purchased a particular product during a month, or that Y% of visitors to this web site are between the ages 25-34.

From time to time, we may provide you the opportunity to participate in contests or surveys on our site. If you participate, we will request certain personally identifiable information from you. Participation in these surveys or contests is completely voluntary and you, therefore, have a choice whether or not to disclose this information. The requested information typically includes contact information (such as name and shipping address), and demographic information (such as zip code).

As is true of most web sites, we also gather certain information automatically and store it in log files. This information includes internet protocol (IP) addresses, browser type, internet service provider (ISP), referring/exit pages, operating system, date/time stamp, and click stream data. We use this information, which does not identify individual users, to analyze trends, to administer the site, to track users' movements around the site and to gather demographic information about our user base as a whole. We do link this automatically-collected data to personally identifiable information like IP addresses and email addresses. However, this is solely for internal uses and used to verify appropriate registration methods.

Finally, may disclose subscriber information in response to subpoenas, court orders, and other legal processes.


We are committed to the safety of children and do not intend to collect personally identifiable information from children under age 18. If you are under age 18, please ask your parent for permission before sending any information to our site or anyone else online. Have your parent contact us as indicated below in order to provide us with prior written consent. We will not intentionally use personal information from or send marketing communications to children under age 13 without prior parental consent.


A cookie is a small text file that is stored on a user's computer for record-keeping purposes. We do not use cookies on this site. This privacy statement covers the use of cookies by this site only and does not cover the use of cookies by any advertisers.

Aggregate Information (non-personally identifiable)

We maintain the right to share aggregated demographic information about our subscriber base with our partners and advertisers. This information does not identify individual subscribers. We do not link aggregate user data with personally identifiable information.

Third-Party Links

For your convenience, our newsletter contains links to third-party web sites that are not owned or controlled by us. We are not responsible for the privacy practices of these other web sites. We encourage you to note when you follow links in our newsletters and to read the privacy statements of these other web sites. We encourage you to be aware when you leave our newsletter and to read the privacy statements of each and every web site that collects personally identifiable information. This Privacy Policy applies solely to information collected by


We use certain efforts to secure our web site. We will periodically review our security policies and implement changes from time to time. However, we cannot and do not guarantee complete security, as it does not exist on the Internet. If you have any questions about security on our web site, you can send an email

Business Transitions

In the event goes through a business transition, such as a merger, acquisition by another company, or sale of all or a portion of its assets, your personally identifiable information will likely be among the assets transferred. You will be notified via prominent notice on our web site prior to any such change in ownership or control of your personal information.


If you no longer wish to receive our newsletter and promotional communications, you may opt-out of receiving them by following the instructions included in each newsletter or communication or by emailing us

Acceptance of Terms

By subscribing to our newsletter, you agree to the Privacy Policy. If you do not agree to this policy, please do not subscribe to our newsletters. We reserve the right, at our discretion, to change, modify, add, or remove portions of this policy at any time. All Privacy Policy changes will take effect immediately upon their posting on the site. Please check this page periodically for changes.

Contact Us

If you have any questions or suggestions regarding our privacy policy, please contact us

Architecture | padsite | a coldfusion framework


Understanding Padsite's Architecture

History and Overview

In my experience, it seems that one of the most time-consuming parts of building a dynamic website is building all the backend reporting that supports it. In fact, a fitting acronym, C.R.U.D., is used among programmers to describe the Create, Read, Update and Delete functions that are written over and over again. It's the least fun part and it represents a large proportion of the code.

Padsite originated from a humble custom tag that was meant to save me some time writing SQL. It would take a list of numeric field names and a separate list of string field names and perform an action (insert, update, delete) given the table's name, the record ID and the scope of the incoming data (url or form). String values were qualified with single quotes and numeric values were passed through ColdFusion's Val() function on their way into the database. This proved to be a good timesaver but I knew more was possible.

Later, that custom tag was expanded into a small app that used a schema to keep track of all my tables and all the fields within those tables. This schema kept track not only of the name and datatype of each field but it also allowed me to assign subtypes as well. For example, a field with a varchar datatype might have one of the following subtypes asssigned to it: email address, phone number, url, formula (for calculations), etc. In addition to the most common, standard data types such as bit, int, money, text and varchar, Padsite adds some of its own data types which i will describe later.

Taking advantage of this schema, I develped two 'agents' (basically just controller templates) named reporter and editor whose job was to generate my reporting and editing pages for the backend. These generated pages were a lot like controllers although I was not yet familiar with MVC architecture when I started this project. Versions 1 and 2 of Padsite were written using cfincludes but with version 3, Padsite was restructured into a full-blown Model-View-Controller architecture utilizing ColdFusion's application.cfc framework.

Padsite still centers around the reporter and editor agents but they are now packaged as CFCs.


architecture sketch (diagram)


The Reporter Agent at a Glance

The reporter's job, given the name of the table to be read, is to provide the records as well as the table's schema in a structure typically named 'Report'. The Report struct contains all the records and additional information needed to display them. The controller then renders the report page using a set of views that support sorting tabs, row queueing and more.

The reporter agent resides in /padsite/services/reporter.cfc and its main function is psReadRecords.


The Editor Agent at a Glance

The editor's job is more complex. It provides the common insert, update and delete functions but it also provides a search function that shares the same basic views as the editor. There are plans to add a read-only viewer but that hasn't really been needed so far.

The editor agent resides in /padsite/services/editor.cfc and its main functions are psReadRecord, psInsertRecord, psUpdateRecord, psDeleteRecord and psSearchRecords.


Custom Data Types

As mentioned, Padsite's schema adds some additional higher-level datatypes to your toolbox.

  • filter: allows for a drop down menu in Reporter that allows you to quickly select records with a value based on a list of all distinct values in that column
  • iframe: allows for an inline frame summary (or mini-reporter) inside of an editor controller - for viewing child records (single-to-many)
  • list: allows you to create groups of records as lists of ID numbers
  • custom: allows you to interrupt padsite's normal processing and execute your own custom code for viewing, editing or even calculating a given field