Rebate Helper Update #7

The RebateHelper.com domain is now registered, and a temporary page has been put in place.

You can find a link to RebateHelper.com on the right side of the page under “My Sites.”

Please feel free to sign up to be notified when RebateHelper.com officially opens!

Rebate Center Update #6– Introducing RebateHelper.com

Well, four months and no updates on my rebate center. I’m sure most of you have no idea what I am talking about. Well, here you go. Have a read of these:

http://mikesblog.americasdebate.com/index.php?s=rebate+center

So, here we are, four months later. Here is the news:

– I have registered a domain. RebateHelper.com had not yet been taken for some reason. I snatched it up.

– I have given up on MyTopix. It is a good script with a lot of potential, but the development process is simply not moving. It is stuck in Beta with no future release in sight. I’m done waiting.

– I have decided to go with Invision Power Board. I am very familiar with it from AD, and so I will be comfortable in extending it. The module I wrote for MyTopix should be easily ported to IPB, and so my prior work will not have been a waste of time. IPB is seemingly always in heavy development, with Betas out now, Pre-releases in a few weeks, and a new final version in a few months.

– I need hosting. I don’t have money for hosting. This could be a problem.

– I need an IPB license. That is either $70 or $185. This could also be a problem.

– I have made a mock-up of a design that I am about 50% satisfied with. See it here: http://www.americasdebate.com/rebatehelper.com.png

So, with that being said, all I can do now is wait. I want to build this using the newest version of IPB, and I’m not going to code it for a Beta now just to recode it for a final version in a few weeks/months. I will post another update when I pickup working on the project again.

Rebate Center Update #5

Well, time for another update, although I am yet to receive a single comment about this exciting script. That’s OK, I guess– the users of the rebate center will probably get a kick out of reading the development blog once the site has been opened.

Development on the rebate center has slowed down a bit, not because I have run out of things to do, but because I have hit a wall.

This seems to be a regular feature for me when coding a big project. I imagine that other developers experience similar stumbling block.

When I write code, it is as close to a visual art as I get. I can’t draw. I can’t paint. I can’t do any of that. So when I write code, I try to make it the most beautiful, most efficient piece of work that I possibly can. Unfortunately, that sometimes leads to a slow development process.

Before I get into the stumbling block, I’ll talk about one success I have had. I added a feature that I didn’t plan, but was clearly necessary.

When you add a rebate to the system, there is some basic information you must provide. In the interest of keeping the form from being an overgrown monster, I built form fields for the absolute-minimum information I need to run the system.

That is all fine and good, but not always practical for a user. Let’s say a user tracked down the corporate directory for a company that has stiffed them on a rebate. As it was, the user would create a general note for the rebate with the included information. Then, when they want to retrieve that information, they would have to go back into the rebate, and search through their notes to find the information the entered.

Now, users can add “custom fields” to their rebates. The fields appear directly below the rebate summary, so they are very easy to find very quickly. To add a field, a user simply clicks “Add More Information” for a specific rebate, and then provides a field “title” and a field “value” for their custom information. The system allows users to add as many custom fields as they would like.

And now the stumbling block: Statistics.

These statistics are giving me the toughest time. It seems it is incredibly difficult to build real-time statistics without either a lot of processing via php, or a lot of reading via mysql.

The statistics I’m trying to build are simple. Members will be able to see where they rank compared to other members in four categories:

* Success Rank: The percentage of a user’s rebates that were successfully completed.
* Total Value Rank: The cumulative value of all rebate checks a user has received.
* Average Value Rank: The average value of all rebate checks a user has received.
* On-time Rank: The percentage of a user’s rebates that were received on-time.

Users can view a site-wide list of rankings (everyone on the site), can view just their statistics (from their rebate center homepage), and can use a dynamically-generated signature image that lists their ranking in all four categories.

I’ve thought and thought and thought about how to pull these stats, and can’t come up with anything good. I’ve settled to using a method that seems to be a problem waiting to happen, but there is not much I can do for right now. Once the system is underway and I have better sample data for testing, I will have to rewrite the statistic functions.

For now, I read every single rebate in the system with one huge SELECT query. I then step through the rows, and build an array that looks like this:

    [6 ](member id) => Array
        (
            [past_due_rebates] => 3
            [open_past_due_rebates] => 1
            [closed_rebates] => 2
            [successful_rebates] => 2
            [total_cash_received] => 128
        )

From there, I loop through the array, and create four new arrays of the actual statistics. Perform an arsort() on each of the arrays, and I end up with a nicely formatted array like this one:

success_rank ARSORT: PrintArray
(
    [6] => 0.666666666667
    [5] => 0.25
    [4] => 0
    [2] => 0
)

This allows me to access any of the statistical arrays whenever I need them. I can pull a specific element of an array, or I can pull a specific user’s position within the array.

I’ll take these four arrays, put them into one big multi-dimensional array, serialize it, and stuff it into a cache table I’ve created in the database.

I’ll be writing a stats_read() function and a stats_write() function to serialize and stuff the array, and take in and reformat the array into a usable format.

I’ll run the script that rebuilds the stats with a CRON job, and will hopefully keep CPU usage under control as a result.

It shouldn’t be long before I finish the stats section. Then, I just have to perform a complete rewrite on all of the code to make sure it is as efficient as possible, register a domain, and we’re set for a beta launch.

I can’t wait!

Rebate Center Update #3

Here is the latest progress:

ss11

This is the screen you see when you click the “View Notes” icon on any rebate. It allows you to add a note (four big buttons at the top), and review previous notes (legend/table display).

Tomorrow I’ll finish off the “add note” form, which is more complex than just a simple form. It shows previous notes for reference, and a summary of the rebate as well.

I’ll actually be writing a generic “rebate info” template/function tomorrow that can be used throughout the module. It will make it nice and easy to remain consistant with the display.

Rebate Center Update

Alright, I’m making some major progress on what is tentatively called the “rebate center.” The project is progressing quickly, and should be done in beta form in about a week. It’s going to be a great resource for anyone who sends out a lot of rebates like I do.

Screenshot 1.
ss9
This is the main screen that the user sees when they first enter their rebate center. This is achieved by clicking a link at the top that says “Rebate Center” (clever, I know).

For right now, only the top two sections contain live data. I haven’t quite worked out how I’m going to do the overall stats yet, but I will figure something out. The site-wide stats are important, I think, because it gives a sense of competition for the users. I think I am even going to make dynamic signature graphics that members can use that shows their rank on the site.

Screenshot 2.
ss7
This is the screen that the user will see when they choose “Add Rebate” from the top navigation tabs. It is a pretty basic form, and I have got most of the validation worked out. Of course, I do not have any fancy javascript validation, so if javascript is your thing and you would like to help me out, drop me a note.

I am trying to keep the form as unobtrusive as possible. At no point in time do I require people to put in their own personal information. I am not interested in knowing exactly who they are or exactly where they live. I want information on a need-to-know basis, and try to require only what is necessary to perform the functions of the system. People know their own phone numbers and addresses, and if they don’t, they can always make use the built-in note system to… uhh… make a note.

Screenshot 3.
ss7
This is the Open Rebates Summary that the user sees after they click “Open Rebates.” Please don’t mind the border on the table. Keep in mind, this is the development version, and as such the graphics are nowhere-near final. They are just whatever I whip together on the fly as I work.

There are three graphics on the screen. The notepad takes you to the summary page for the notes system. Clicking the stack of cash says, “Wohoo! I’ve got my rebate. Close this rebate out.” Likewise, the red stop sign says, “Man, this crappy company screwed me out of my rebate money. Close this rebate because I give up.”

If a user doesn’t close their rebate after a certain amount of time, it will automatically be marked as “failed.” I am not sure how much time should pass, though. My initial though was 120 days, but now I’m considering that a rebate is considered a loss and automatically closed when twice the expected period passes. For example, if the rebate form says your check will arrive in six to eight weeks, we would double the highest number, and automatically close your rebate as “failed” after sixteen weeks.

The user can, of course, reopen the rebate if they end up receiving it. When the nightly recount and rebuild occurs, however, it will be re-closed and failed.

Screenshot 4.
ss6
This is the Closed Rebate Summary screen, reached by clicking “Closed Rebates.” It provides a summary of rebates categorized as successful or failed. There is an icon that will take the user to the notebook page for that specific rebate, and the funky-looking red and green curvy-arrow-thing is the Reopen button– one click and the rebate is reopened.
Screenshot 5.
ss5
This is the Notebook summary page, accessed by clicking “Notebook” at the top. It provides a summary of notes on all open and active rebates in the system.

Clicking on the title row in the top table will take you to the detailed notes page for that specific rebate. Clicking on the title of the note, however, will bounce you down to the bottom of the page so you can read the note then and there without another pageload.

Notes are divided into four different categories: General, Email, Phone, and Mail. The idea is that you can mark each note with the subject matter. If you email the company and want to make a record of it, make an email note. If you called them, make a phone note. If you just want to record the secret phone number of the CEO of the company that you uncovered by digging through newsgroup archives, make a general note. If you resubmitted your rebate through the mail, make a mail note. I think you get the idea.

Screenshot 6.
ss10
This is the “Add Note” feature, reached by clicking the icon that corresponds to the type of note the user would like to create (this page is not function with live data, and hasn’t been shown). This feature currently works, although the note summary that it feeds the user is not live data, nor are the previous notes that are listed below. It will be working soon, though.

Adding a note is meant to be fast and easy, and they system is coming along nicely.

That’s all I have for now… stay tuned for more updates!

Rebate Center – My New Project

Well, I’ve got myself a new project. I am building a web application that helps people keep track of rebates they submit.

I originally started building this out of necessity– I send a lot of rebates, and have to maintain mass amounts of paperwork in order to keep them all straight. It got to be too much trouble, and I decided I needed a better way to track them.

Sure, I could setup a simple spreadsheet and keep track of them just fine, but that is not my style. I need to do it much bigger and much better than a simple little spreadsheet.

I need reminders. I need statistics. I need someone to take my hand and walk me through the process of completing my rebates. I need a webapp.

So, I started the coding on this yesterday. Let me give you a little bit of background on my coding and my coding skills.

I first started coding PHP in July of 2002 as we prepared for the launch of America’s Debate. I had several years worth of basic HTML experience, and PHP was a natural progression for me.

It started simple, with my first hack as simple as taking an IP address (from the online list), and making it a link to the Arin WhoIs search. It was really simple.

I eventually built my skills to the point where AD runs a heavily modified version of IPB. Granted, the core functionality remains the same, but the creature comforts we have at America’s Debate as a staff and as a membership blow the doors off many other web forums.

As Invision versions progressed, so did my PHP skills. I went from making simple hacks to making nearly full-blown webapps. One example of which I am most proud is the America’s Debate Resources Directory. That took me several months to develop, and, in my opinion, blows the doors off the Invison Top Site List.

The InvisionTSL is a good script (judging from a user experience, I haven’t seen the code), but it just isn’t meant for a directory. Sure, it can be used as one, but that is not the original intent of the developer. Why anyone would waste their time coding a top site list, I haven’t a clue. But they did, so I made my own.

The InvisionTSL also seems to be a bit bulky. It takes 7 queries to complete a pageload, quite a bit considering the base Invision Power Board index.php takes only 4 queries. My Resource Directory script doesn’t add a single query to the pageload– it’s all cached. And, even when extra queries are required, they are ultra-optimized (the best I can) and run very, very fast.

The next most proud accomplishment I have made is the API/CMS that we use at AD. I basically made my own API/CMS (Application Programming Interface/Content Management System) to get data out of the forum backend and into the website’s front end. It is a very robust script that takes very little overhead to run. Every detail of the non-forum pages at AD is run through a permission filter, and every page is custom-built for the user based on those permissions. It’s a pretty damn slick setup if you ask me.

So, my PHP abilities have greatly increased. From modifying a simple string of text into a link to development of a full-blown resource script and API/CMS, I would say I have learned a bit, and improved a great deal.

So now, The Rebate Center.

I haven’t decided what to name it yet, nor do I really have any good idead for the name. I have only been able to find one other site doing what I plan on doing, and they have a decent domain: rebate-tracker.com.

Fortunately for me, just having a decent domain doesn’t make you the best at what you do. Their software is horrible. Their design is infantile. Their site is obtrusive. Their motives are not clear. That is why their site seems to be failing.

I, on the other hand, have an Internet history. People know who I am because of AD, and if they don’t, they can easily find out. They know I’m not necessarily in it for the money, although I wouldn’t turn it down, either. They know that I’m not about to send SPAM to my users, nor am I going to sell their information to the highest bidder.

People know me from my blog (well, at least one or two do). They know I am just a regular person, not a corporation looking to score fast money on the backs of unsuspecting visitors. And they know I am “The Deal King.”

I think my service will be a bit more trustworthy and dependable than the other rebate tracking site.

So, without further delay, I present to you several screenshots of my development work in progress:

Rebate Center Home Add Rebate Open Rebates Closed Rebates

Feel free to post any questions or comments, domain name suggestions, or random thoughts. I am going to try to document my progress here in this post. :)

Edit Sep. 11, 2006: Too… Much… Spam…. Comments closed. Sorry.