Archive for the ‘open-source technology’ Category

We’re BAAACK!!!

October 21, 2008

We’ve been busy the past 6 months growing and expanding our online marketplace at and although we continue to be busy (especially with the holiday season only a few weeks away), we are excited to share with you some of the things we’re doing on this blog. We’ll be posting in the next few days, so check back! Thanks.


Honorable mention in eCommerce contest

October 3, 2007

For all the time we put into creating our online marketplace and the website that supports it, for all the late nights and weekends, for learning how to code using PHP, javascript, HTML and CSS, it’s nice to get a little recognition. Read on.


WebAssist announced the winners of its 2007 “Do More / Win More” contest, and was awarded honorable mention (4th place) in the “best eCommerce” category.

WebAssist is a leading vendor of software solutions for the Adobe Macromedia Dreamweaver platform. The contest was open to all websites that incorporate certain of WebAssist’s products., running on an Apache/Linux/PHP 5/ MySQL 5 platform, leverages WebAssist’s eCart (shopping cart), DataAssist (database integration), Universal Email, Cookies Toolkit, Validation Toolkit (both client and server side form validation), and SecurityAssist (registration and authentication). WebAssist products are available for PHP, ASP, and ColdFusion. WebAssist’s product suite is supported by first-class tech support as well as professional services for custom implementations.

WebAssist has some cool new products and tools, including a tool to help create CSS compliant websites in collaboration with Eric Meyer (recognized CSS guru), and tools to integrate Google apps, PayPal, Skype and PlayStream video.

A thank you to WebAssist for recognizing our work!


January 3, 2007

Building a business is not possible without the help and advice from people we like to call subject matter experts. One of the many rewards of building and running a business is to be able to meet people who are subject matter experts and freely offer their vast wealth of experience and expertise to a new business like ours. We have been fortunate, and are very appreciative, of the many people who are helping us build something very exciting! In a series of posts we would like to acknowledge a few of our friends…

We wanted to launch a special promotion (10% savings on all tableware purchases) for a local bank’s customers and needed to add a feature to capture and validate a coupon code in our shopping cart. Although WebAssist’s eCart shopping cart does have a couple of tutorials for discounts, it does not have one for coupon codes. We searched their user forum and found Kevin R. Rounsavelle’s excellent coupon code demo, which is accompanied by a well-written tutorial and a forum thread. Kevin is President of, which assists clients with the design and implementation of websites and eBusiness applications.

The demo and tutorial are written for WebAssist’s eCart shopping cart, but can easily be adapted to other shopping carts. The ASP and PHP versions of the coupon code can be found in the tutorial and forum thread, respectively.

Kevin’s demo and tutorial was a lifesaver! We completed the coupon code in a matter of a few hours. To resolve a couple of issues we experienced, we contacted Kevin and he agreed to quickly assist on a Friday evening between two client applications that were scheduled to go live. He was headed out of town on Saturday, and promised to continue with the help if we needed it upon his return (which was not necessary as his initial advice helped us fix the issues). We have since contacted Kevin with a question regarding a Web Assist tutorial for volume discounts in shopping carts, and he has been equally responsive and helpful.

We appreciate Kevin’s help on a couple of critical feature implementations (coupon code and volume discounts), and recommend his firm to anyone who is interested in eBusiness applications written in PHP or ASP. It is people like Kevin, and their participation and sharing in user forums and with demos and tutorials, that greatly benefit people like us who are building new businesses.

We have reproduced below a few comments/suggestions we have made to Kevin on his wonderful coupon code demo and tutorial.

  1. Please include the PHP discount_process code in the tutorial for those of us who do not use ASP. I did find it by searching all threads, but it would be nice to package it in the tutorial.
  2. Regarding the PHP discount_process code, any chance this could be updated for PHP 5 (no longer uses CHAR VARS). And in the redirects, I tried to use dynamic URLs, but it did not work. My reason to want to use dynamic rather than static URLs is that these pages are secured with an SSL certificate on my production box, but I don’t have an SSL certificate for my development box. It is a little cumbersome to have to manually change these URLs each time I move the files from development to production.
  3. Would be helpful to point out that session cookies have to be added to the header of each page that contains a shopping cart. I have an editable shopping cart (where customers input the coupon code), followed by the customer info page (billing/shipping info), followed by the read-only shopping cart for customer to confirm purchase. I also have a quick cart in the nav bar on every page.
  4. Another enhancement to the coupon tutorial would be to show how to create multiple coupons for marketing campaigns running in parallel.
  5. BTW, Kevin mentions an “advanced” tutorial that includes expiry options for coupons – has this been published and where? Would love to get my hands on it.


We received an immediate and very kind response from Kevin Rounsavelle to our suggestions, which we would like to share.

“To have multiple coupons, you just add multiple coupon codes to your discounts table in your database. You can then add either a rules table or custom code to specify if a customer can apply multiple discounts codes at the same time. I also use an ACTIVE field in my discounts table.

I haven’t had time to finish the advanced coupon code tutorial mostly because I have been working night and day on a retail ecommerce application that includes more discounts and merchandizing features than any other application on the market right now. I plan to release in around March 1.

However, expiration and start dates are really simple. You just have to add a startdate and enddate field to your discounts tables and then add some conditional code on your discounts processing page to only process records in the table that are between the two dates.

Example in ASP:

<% Dim TodaysDate, StartDate, EndDate
TodaysDate = Date
StartDate = DiscountsTable.Fields.Item(“StartDate”).Value
EndDate = DiscountsTable.Fields.Item(“EndDate”).Value
IF TodaysDate >= StartDate AND TodaysDate <= EndDate Then %>
<% Coupon Processing Code Goes Here %>
<% End If %>

Using the logic above, the coupon code(s) will not be processed unless today’s date falls between the starting and ending dates of the campaign.”


Outsourcing webhosting

December 15, 2006

We built our own development and testing environment by installing and running XAMPP (which includes an Apache webserver, PHP 5 server scripting language, MySQL database) on a Windows XP PC.  Total cost = $0.

As mentioned in a previous post, we decided to out-source hosting of our website. Webhosting has become a commodity service with feature sets being largely the same across the dozens of service providers. What really differentiates webhosting companies is price, performance and service levels.  It was important that our webhosting company own the data centers and not act as a reseller for someone else, invest in state-of-the-art hosting infrastructure, be reasonably priced ($10 or less per month), and have 24/7 live, competent technical support.

We selected Bluehost located in Orem, Utah as our webhosting provider.  Bluehost’s main challenges have been managing incredible growth (including that of Hostmonster and Fastdomain, two affliates) and not investing in new capacity and more support engineers to support the fast pace of that growth.  While we were developing and testing the site this summer and early fall, Bluehost’s performance deteriorated and we almost moved the website to another webhost.  Just before launching the website, we upgraded from a shared IP to a dedicated IP (an additional $30 per year). That change, combined with Bluehost resolving their performance issues, has improved performance to an acceptable level.

Now we wish that Bluehost would become more customer centric (less feature-driven) and improve its communication with customers.  One example would be to consult with customers about proposed changes before implementing these. Now we recognize that not all customers will agree with proposed changes, but if one applies the 80/20 rule, that should be good enough. Consulting with customers could easily be done through a blog (their CEO has one but it is not interactive) or their user forum. It would be a smarter approach to business to assess customer impact and reaction to major changes first rather than react once customers express their views and possibly move their business somewhere else.

Catering to different user behavior

December 15, 2006

One of the key design objectives for the website was to provide several different ways for users to browse/search the site. Although at present our site is not large, it is important to recognize that different users will navigate a website in different ways and therefore the site should cater to different user behavior. Equally important is to make any page on the site easily and quickly accessible. We did that in several ways:

  • Horizontal navigation bar with two levels
  • Contextual links embedded in text
  • List related items in right side column – items are clickable
  • Integrate a site search engine above the navigation bar
  • Minimize number of clicks to reach any page (max. 3)
  • Optimize page load speeds
  • We are using several free “web statistics” tools to track and learn about user behavior to continuously improve the user experience (our site does not collect any personal information about users unless explicitly stated, e.g. to enable the shopping cart). One of these tools, Google Analytics, allows website owners to track and analyze how users enter, navigate and exit the site, what content they view, how long they spend on the site, whether they return, and if they transact on the site. Note: Google Analytics is absolutely free, and can be used with or without Google Adwords or any other marketing/advertising campaign. It does require you to copy and paste a code snippet on every page you wish to track. Goggle Analytics is a fantastic analytical tool, but our assessment is that it is a works-in-progress (Google doesn’t label it “beta” but probably should) and some of the stats deviate more than expected from Awstats and Webalizer.

    We also would like to explain our thoughts about site search. You may question site search for a small site, but we thought that if someone came to our site looking for red cappuccino cups or yellow dinner plates, they may be more inclined to type the search phrase into a search engine rather than using the navigation bar. Or they may be looking for a cheese fondue recipe or how to make a caffe latte, in which case they may again prefer to search. Our decision to incorporate site search was also based on implementation cost (license fee plus time to integrate and configure). We found Wrensoft’s Zoom search engine to be the answer. A free version (with no advertising) is available for small websites up to 50 pages. For larger websites, you can purchase either the standard version ($49) professional version ($99) or the enterprise version ($299). Zoom is easy to install, configure and maintain (ours was up and running in about 30 minutes) and runs on javascript, PHP, ASP or CGI. It is capable of full text searching of static and dynamic files (including PDF and Flash). And it supports foreign language search. You can modify the CSS and seamlessly integrate Zoom into your site (e.g., add to the navigation bar). The search algorithm is open and configurable for the experienced programmer. The search results page is configurable, and we included a quick shopping cart at the top of the search results page. Wrensoft has just released version 5.0 of Zoom. All in all a great package!

    From prototype to online store

    December 14, 2006

    We developed a prototype website (without shopping cart and database integration) using Apache/PHP/MySQL running on Windows XP on a Dell PC. You can download XAMPP from Apache Friends. There are several versions that run on Linux, Windows, Solaris and Mac OS. Installing the package was simple and quick, and compared to downloading and configuring each of the applications/database separately, was a huge timesaver! We accomplished a number of objectives with the prototype, including approaching banks for financing (the prototype together with the business plan was part of our “roadshow”). Having a working prototype definitely made a difference in our discussions with banks.  We successfully raised funds from a local bank to finance the import of Terra Keramik’s handcrafted tableware from Switzerland.

    There are dozens of shopping cart options available and it is important that one does his/her homework. We selected WebAssist’s eCart for the following reasons:

  • supports multiple server-side languages (including PHP 4 and 5)
  • integrates with several databases (including MySQL)
  • compatible with all major payment gateways (both local and remote checkout)
  • available as a Dreamweaver extension
  • good tutorials for both static and dynamic implementations
  • includes several prepaid support incidents
  • good user support forum
  • several complementary WA packages available
  • We actually purchased WebAssist’s eCommerce package, which includes eCart, database search, client/server-side validation, email from the website, cookies toolkit, etc. and we found is a great value at $399 (includes 5 pre-paid support incidents). The support incidents were useful because we wanted to customize the code and the tutorials were too generic for our purpose. Two areas where we would like WebAssist to improve is their integration with AuthorizeNet (probably the largest payment gateway for processing online/offline credit card payments). We struggled a little with Web Assist’s integration with AuthorizeNet’s AIM method (local checkout), and we recommend that WebAssist improve its tutorial and Authorize Net provide better, up-to-date API documentation. To overcome the integration issues, we used Sound Commerce’s AuthNet PHP script ($49) to integrate eCart with AuthorizeNet. We also had trouble with WebAssist’s email application auto-generating a customer confirmation email on successful customer payment/checkout. Using one of the support incidents, we worked with a WebAssist engineer to resolve the email issue to our satisfaction.

    Do it yourself

    December 12, 2006

    For anyone out there wondering – can you learn how to design and develop a good eCommerce website – the answer is a definite YES!

    We suggest you start with a web development tool (also referred to as an HTML editor) such as Macromedia Dreamweaver that has both a design view (WYSISWG) and a code view. Although there are several popular web development tools available, Dreamweaver is considered by many the industry standard and therefore integrates well with other software applications and extensions. To get a jump-start, we attended a 3-day web development course (about $1400) at Motion Over Time in New York City to learn how to build a simple website.

    Initially, we designed the layout and content of our site using the design view of Dreamweaver, but quickly “graduated” to the code view and hand-coded most of the site (including re-writing much of what we had done in design view to separate the structure, content and presentation of the site). The latter step may not be necessary for smaller sites but it does improve the maintenance and performance of a larger website. In the process we embraced cascading style sheets (CSS) to separate both style and structure from the content and behavior of the site. There are a vast number of books and articles on CSS, and we recommend both A List Apart and books written by Eric Meyer.

    We chose another industry standard, Adobe Photoshop, to work with static images. This is a powerful tool that may be more than what you need, but we found that some of the more simpler alternatives have limiting functionality. And like Dreamweaver, Photoshop integrates well with other applications (especially Adobe products) and there are numerous good tutorials and “how to’s” available. One of these we recommend is the book Photoshop CS for the Web Hands-On Training from We opted to buy this book and learn ourselves rather than taking a “classroom” type of course.

    To add interactive behavior to our website, we learned javascript (a client-side scripting language that runs in your browser) and PHP (a server-side scripting language that runs on the server). PHP is one of the more popular languages because it is a simple, yet powerful object-oriented language that is open-source and integrates well with MySQL (fast, open-source relational database). Javascript is also a simple language, but should be used judiciously because many users will turn off javascript in their browsers and therefore DHTML (dynamic HTML) and CSS may be more than adequate alternatives.

    We solved an interesting challenge using javascript: how to represent that our products are available in 8 funky colors without displaying 8 large images for each product that would use extensive screen real estate. Our solution: show thumbnails (50×50 pixels) in different colors and enable user to roll over these thumbnails to see single, larger image (200×200 pixels) change color as the mouse moves across the thumbnails (done in javascript). Each thumbnail is also clickable to pop-up super-size images (500×500 pixels) in color. Check out the effect on our espresso cups page.

    The intersection of design and technology

    December 10, 2006

    Once we decided to create an online marketplace to distribute Terra Keramik’s handcrafted tableware, we asked ourselves several key questions:

    1. How do you sell a premium product that is handcrafted by an artisan, three-dimensional and finished in stunning, colorful glazes through the web, which is a two-dimensional medium that does not present well the physical properties of a product such as finish, color, weight, dimensions, etc.?
    2. What brand and product qualities do we want to communicate through our web design, content and features?
    3. What type of web presence do we want? Product-driven (i.e. catalog layout), content-driven, feature-rich, or a combination
    4. What about the technology platform? Open-source or proprietary (i.e. Microsoft)? Are performance, security, and scalability important? How about in-sourcing vs. out-sourcing of development and hosting?

    So here are our key design choices:

  • aesthetically attractive site to present handcrafted product
  • provide product specifications for experts and connoisseurs
  • simple, clean look-and-feel consistent with the product
  • intuitive navigation
  • relevant content that would support the product marketing
  • interactive user experience
  • transparent information about business terms and conditions
  • And here are our key technology choices:

  • open-source technology platform (Apache, Linux, PHP, MySQL) supported by large user communities
  • largely standards compliant (HTML, CSS) [we say largely because we strive to be but we had to make some compromises in the short term]
  • separate site structure, content and presentation
  • optimize site performance
  • use packages or widgets where it makes sense (WebAssist’s eCart, proxy2’s AdvancedPoll, Sound Commerce’s AuthNet integration)
  • local checkout payment gateway (we own the customer and his/her experience)
  • secure the site with a branded SSL certificate
  • Let’s come back to the question about out-sourcing development and web hosting.

    Out-sourcing hosting made sense given the commoditization of this service and therefore attractive feature/price relationship.

    But the decision to out-source development was not so simple. Several friends suggested we out-source development to India. We were concerned about finding someone who could translate our brand and product vision into a website that combined good design with good technology at a reasonable cost. Our experience is that organizations tend to have an inherent bias towards either design or technology, and it is rare to find someone who is able to balance the two. And manages to do so on a reasonable budget and schedule.

    So we decided to develop the website ourselves.