Please excuse all the spam while we work to remove it.
So I just wrapped up creating an online shopping cart / store / e-commerce system for our teams which is integrated with Amazon Simple Payments. The plan was to do something fairly simple which allowed users to create items that had a few options, and let it evolve from there if enough teams wanted more features.
I have built a couple of e-commerce systems in the past so I had a decent understanding of the process, and while there are some tutorials and some sample code online, I wanted to document a few things that I had to decide that weren’t normally mentioned in the posts I found.
This post will be describing a little bit about the architecture of the system, with further posts getting into the technical side and issues I found. As I mentioned earlier, the system is only comprised of items which are broken down into 3 types. All items have the following regardless of what type they are: a mandatory name, optional description, and an optional URL for an image.
Simple items have all of the above as well as a price and the option to specify whether the item has unlimited inventory or has a set and managed inventory. If the inventory is set, the seller puts in how many items are in stock (or 0 if it is out of stock,) and when a buyer makes a purchase, the inventory is reduced by the number of items the buyer purchases.
Multiple Options. Multiple option items have the original attributes, along with a single price. What is different about multiple option items is that they have one or more options with unlimited or managed inventory for each option. For example, you might sell a t-shirt for $15 with different sizes. The sizes, for example small, medium, and large, would constitute three different options for the item.
Finally, we have items with Multiple Options and Prices. These items are similar to Multiple Option items, except that the price is now editable for each option as opposed to a single price for the item. One example where this is used is that if you have that same t-shirt as above, but if it cost an extra $2 to make xx-large shirts you might pass that on and set Medium, Large & XL at $15, but XXL at $18.
That’s the basic design and requirements for the items available for sellers to add to the system. On the front-end, buyers view a list of all the items on one page, where they can can add items to their cart with a specific quantity and if the item has options, one of those options.
That is the extent of the items in the store. We do not have shipping prices, categories, lots of attributes or other extras. While shipping charges might be an issue in the future, teams can build in those costs to their price, or even use the option system if they want (T-shirt shipped Priority: $25, T-shirt shipped ground: $18, etc.)
The reasons the system is so simple currently are twofold. One is simplicity - it makes it very easy for sellers to create their store, add in and edit items and begin selling. Second, is that in my experience there are a limited number of items a team is generally selling or collecting money for. These are usually selling gear, apparel and tickets, collecting fees or dues for the team, league, camps or clinics, and accepting fundraising money. While I’m sure people can think of more, I feel most teams will not need a fully featured shopping cart when adding the majority of their items.
Now, even though this is a fairly simple system, it does take a bit of effort to design and code. I will be going over some of the technical challenges, issues, and the design I went with in the next part or two.
FreeTeams originally started on a shared server way back in June 2007. Shared servers are very inexpensive, and great for starting new blogs, personal websites, and small business sites. It was something like $7 per month at the time, and for a bootstrapped company with no business loans or outside investors giving us money to splurge on infrastructure, that is a great selling point. We were using DreamHost for those who care; it’s great, inexpensive, and I have been using them since 2004 and still do for other websites. Shared servers are not meant to house large websites with thousands of unique visitors per day, and as soon as we started getting a decent amount of traffic we would need to move to a dedicated server that services only our one website, and not a few dozen others as well.
Now, you may ask why we didn’t just go with a dedicated server to start with? Well at the time (and still happens to be the case today), dedicated servers with great support would have run me about $200 a month. Compared with $7 per month and with little revenue coming in, that would have burned a huge hole in my wallet, especially with no idea of when the site would warrant that kind of a server.
Luckily the site grew fast enough that it only took us 6 months to get too big for our shared hosting, and in February of 2008 we got in touch with Liquid Web to purchase a dedicated server for FreeTeams. Liquid Web offers a very extensive support service that allows me to spend a lot less time worrying about keeping the server updated and running smoothly, and spend more time with support requests and adding new features.
We have been on the same server for a little over three years now, and have had to upgrade it a couple of times over the year with bigger hard drives for your photos (eventually leading to working with Amazon) and additional RAM as we have had more and more visitors coming to the site each day. Unfortunately when we purchased the server, it was using a 32 bit operating system. The reason this is bad is that it limits the amount of RAM we can add to the server. We might be able to physically add more memory, but the operating system can only actually use just over 3 Gigabytes software-wise.
When Liquid Web came out with a new line of servers earlier this year, I took a look at their offerings and it turns out I can get a much more powerful server with more memory for about 1/3 less money than I am currently paying. Don’t worry, it includes a 64-bit operating system this time, so memory will not be a limiting issue as we grow.
We are currently migrating all our data to the new server and will be making the switch over the weekend, and we will hopefully have no more than a few minutes of downtime. If there are any issues, you can follow them on our blog here as it is not hosted on our server.
We have released the Event & Invitation system into the wild. From the events menu you can create new events, and invite users and non-FreeTeams account holders to your various events. You may enable or disable the events system through the Main Options & Features page in your admin area.
When you create your event, you have the option to make it all day, or with a specific start and end times. You may also set the event to repeat daily, weekly, monthly or annually. On the public event page, you may also display a Google Map of the location of your event. The Google Map will show the location you have entered into the “Where” field when you create your event, so make sure that you put in enough detail (such as an address) for Google to find the location. You can test it out your location at http://maps.google.com beforehand to make sure it shows up correctly.
Along with times and locations, you can enter detailed descriptions, and allow comments to be posted for individual events on an event-by-event basis. You can set up who can post comments on the privacy settings page in the admin area.
Additionally, you may set an event to be Public or Hidden. A Public event will show up on your team’s calendar and is visible to anyone. Alternatively, a hidden event does not show up on your calendar, and may only be seen by users who know the specific link to your event.
Along with creating events, you may also invite users to your event to determine how many people will be showing up. You may invite people who are members of your team, and you may also add separate email addresses. Each invitee will receive an invitation to the event with a link to where they may RSVP as a yes, no, or maybe. You will be able to see each RSVP on your event page if you are an administrator or owner.
You may also edit the style of your calendar on the calendar page by clicking on that particular tab. You will see a preview of your calendar immediately below the style options, which will update on the fly, allowing you to view various colors before saving your theme.
I hope you enjoy this new feature, and while it has been tested a great deal, there may still be a couple of bugs here and there, so let me know if you find one.
I have added in a new feature that has been requested a few times - copying rosters from season to season. Before you had to enter in your roster by hand each season, but now if you have a roster from last season, just go into this season’s roster in the admin area and you should now see an area titled “Import Roster” which will let you import a roster from any other season. There are currently two limitations - the player’s assigned team type cannot be copied over due to the fact that team types do not carry over from one season to another, and images are not copied over either. I am working on getting these added in over the next few weeks.
I am also working on an import and export function to easily import rosters from saved spreadsheets or save them to a spreadsheet.As well, you can now specify whether a form is placed into your main menu or not. Go to the forms page, click “Edit” for the form you want to remove, and next to the name there is a check box titled “Show Link In Main Menu.” Make sure this is checked for the form to show up in the menu, or uncheck it to remove it from the main menu. You should also see the location of the form below the form name, which will let you use it in links or other places you wish to send the form.
We have launched the user comment system for your teams and their associated users. Currently users can comment on photos and news stories, and eventually on events when that system is completed. If you have other suggested uses for users comments (such as on game results, maybe a Facebook Wall-like page for your team) please let us know. You can set the comments system settings in the “Privacy” section of the admin area. To disable comments, simply disallow any members from being able to comment on your news or photos in the privacy section and they will not be shown.
Comments are set by default to automatically be published, but you can enable a moderation system where owners and admins of sites will be notified (if they have notifications enabled for comments, see the last blog post for more info) of new comments and then admins and owners can then approve or delete comments. If you are the author of the comment, you will also be able to delete it at any time. You will also see the comment on the page even if it hasn’t been approved, but there will be a notice telling you it has not been moderated yet. Other users will not be able to see any unmoderated comments. As an admin, you can change these settings in the “Privacy” section as well. All comments are visible once they have been moderated.
Administrators will also see a new comment stream in their dashboard. You can sort by all comments, comments by News or Photos, and unread or unmoderated comments. After you read a comment, it will no longer show up in the photo stream, but you may still delete it from the individual news or photo page. We will also be adding in a more comprehensive comment viewing system in the future to allow you to easily traverse through every single one of your comments without having to visit each individual photo or news page.
I hope you enjoy this new feature and please let me know if you see any problems with it.
Despite recently starting grad school, I’ve been able to put in a lot of work on the site over the past couple of weeks. I have been finally rolling out a lot of our promised features, and a few new ones that weren’t hinted at before.Â Some are live, and others I will be releasing into the wild over the next couple of weeks so be on the look out! I apologize if there have been some hiccups with the site over the past few days as I have been adding them in and testing them - hopefully we have most of the bugs ironed out but let me know if you see anything wacky or out of place as we don’t have a big QA (testing) department (it’s just myself).
New User Features:
New Team Features
We have added in Twitter integration so that viewers can check out your tweets without leaving your team’s site. To enable it, go to the main options page in your admin area (the first page you normally see when you edit your site) and under “Website Features” you should see “Twitter” as the third option down. Enable this, then go to “Static Content” => “Twitter” in the admin menu. Firstly type in your Twitter user name. Next you have two options of showing your Twitter information. The first check box is titled “Enable Twitter Icon”. This will place a Twitter icon on the right hand side of the top menu on your pages (below the header area that normally says “News”, “Schedule / Results”, etc.) and link to your Twitter account. The second check box is titled “Enable Twitter Widget” and will create a menu item on your left hand navigation called “Twitter Updates” that when clicked takes a user to a page with your most recent Tweets and links to your Twitter account.
You are free to enable the icon, the widget, or both. You can also change the look and feel of the Twitter widget that shows your recent tweets to match your site’s color scheme. We hope you enjoy this new feature and let us know if you see any problems with it.
One thing that has been requested in the past is the ability to let owners add in other admins and users on their own. We have added in the ability to do this now. Go into the admin area and go to “Options” -> “Member Associations”. At the top you will see a form to add in a new user association. Type in the username, select what association they will be, and click add.
Admins can edit the entire site exactly the same as an Owner can. The only difference is that Owners can delete Admins, but Admins cannot delete Owners.
Let us know if you have any questions or comments.
We have some fantastic news. We have moved our photo storage to Amazon S3 which allows us to store all your photos (some ~60,000 currently) relatively inexpensively and with easy scalability. This relieves the storage load from our server and keeps us from having to continually upgrade or add more hard drives to keep up with all the files everyone is uploading.
What this means for you is that we have removed storage limits from your account regarding photos. So now your 500MB limit only applies to the files on your “Files” page and system images, such as your header, background images, and roster photos. We will eventually be moving the system images and hopefully the files to S3 as well, giving you unlimited storage space at no cost.
Now comes the fine print. While we describe this as unlimited, if you start using tens of gigabytes of space we will contact you to see about a better option of photo or file storage, as the costs do add up, especially now that we have more than 4,000 teams signed up.
The other issue is downtime, which is out of our control. Amazon guarantees 99.99% uptime, which is great (it means that they try to never be down for more than ~53 minutes per year, or about 8.7 seconds per day.) That being said, if your photos aren’t showing up, please check http://status.aws.amazon.com/ first to see if Amazon S3 is down before contacting us for support.
We have also utilized Amazon CloudFront as a Content Delivery Network so that your photos are delivered more quickly to your viewers. If you aren’t familiar with a Content Delivery Network, it is a service that employs multiple servers at locations throughout the world to send content to users from servers closer to their location. So for our users in Australia, New Zealand, Ireland, England, and other locations that are not near our Michigan data center, your photos are now being served from multiple locations throughout the U.S., Europe, and Asia so they will hopefully download slightly more quickly. The CDN will automatically find the location nearest to you and serve your photos from that location.
We hope you enjoy this new, awesome feature. Please let us know if you have any questions or comments.