Archive for Web Development

Introducing TeamHome

I built a micro-SaaS as my pandemic side project:

TeamHome.app – An internal company directory designed for remote teams. Try it out and let me know what you think.

Read on for details & some background…

Read the rest of this entry »

The last 20% before shipping

What makes a new feature or product update “done” versus what makes it “really done”? At  Close.io we developed our own process to answer this question, based on years of shipping new features for our sales communication platform. Today, we want to share this checklist with you.

Read the rest of this entry »

Solve multiple problems at once

Startup engineering teams face many decisions about what to build. At Close.io, many areas compete for the focus of our small engineering team. Customers often have one little thing they really need. Our team envisions the next big thing to move the product forward. There are poor UX workflows to optimize. We have an idea on how to grow our customer base faster. And of course there are always bugs to fix. The list is endless!

A small engineering team doesn’t have the time or resources to regularly improve every part of a product. It’s not uncommon for a section of an app, once launched, to remain untouched for a year or longer. We usually work to solve a problem or empower customers in a new way or fix a pain point, and then we move on to something else.

One reason I believe our super small team at Close.io has been successful is that we often solve multiple problems at once. When a feature needs to be built, we often expand the scope a bit to include other related problems or features that naturally go together with the first one.

Read the rest of this entry »

Coinbase Bug Bounty Award

Coinbase is one of the best Bitcoin related sites/services. They’re certainly the easiest way to buy or sell Bitcoin if you have a U.S. bank account. When I saw their Bug Bounty program where they offer $1,000 USD worth of Bitcoin if you find a security vulnerability, it improved my trust in their security, but of course also made me want to look for security bugs…

Read the rest of this entry »

How to unit test AJAX Requests with QUnit and Sinon.JS

We write QUnit tests for Close.io, a big Backbone.js app, to help avoid introducing bugs. Pretty quickly when testing front-end JavaScript code you’ll have to deal with how to test asynchronous callbacks and especially code related to AJAX/XHR requests and how their responses are handled. Here are some basic examples of how to use Sinon.JS to handle this.
Read the rest of this entry »

How to allow direct file uploads from JavaScript to Amazon S3 signed by Python

On Close.io we originally implemented Filepicker.io to allow for file uploads while sending emails. While it was a quick way to get started with file uploading initially, after several minutes of downtime of their API and then an unannounced change in their JSON response format, I was reminded once again that you shouldn’t to rely on small startups for critical parts of your tech infrastructure.

There’s nothing wrong with filepicker.io if you want to use a lot of their features, but in our case we just needed to allow simple uploading of files to our own AWS S3 bucket. Here’s how:
Read the rest of this entry »

Guest post on TechCrunch: Full-Stack Web Team

I had my first guest post on TechCrunch last week! Here’s an excerpt:

There is often confusion about the various roles of a web engineering team. I have had to explain, even to technical recruiters, the differences between these roles and that the lines that separate them are often fuzzy. I thought I’d share the framework I like to use to evaluate whether someone is a good fit for a startup’s technical team.

In a startup, you can’t afford to have people who are only able to do one thing. Someone could be adept at writing HTML/CSS, but if they don’t have a great eye for design or know JavaScript well, it’s just not worth having them on the core team. Similarly, somebody who knows a little bit of everything but isn’t advanced in anything will just drag the team down.

The size of the company or startup will determine how many different hats each engineer must wear. Many startups get off the ground with a single founder who does a little bit of everything until he or she can grow the team. It’s also possible to outsource some roles completely. Just as cloud-hosting providers such as Amazon Web Services have drastically reduced the need for hardware/network engineers in web startups, platforms like Heroku take it further and (for a price) can reduce sysadmin and DevOps work almost entirely in the beginning.

In pretty much every case, when a startup grows, people will inevitably start specializing. Even those rare gems, who in the early days can spend the first half of the day in Photoshop and the second half scaling a database, will eventually specialize at least somewhat. If you’re hiring well, you’ll always find someone who can outperform you in at least one area.

I’m a big fan of “full stack” people and think specializing too much, too early, is a bad sign for startups. At Elastic, each of our engineers has written CSS and done database/server management. It’s good when a problem arises for there to be more than one person capable of fixing it. That said, I’m spending the bulk of my day writing in JavaScript/Backbone.js because I enjoy it much more than a coworker who’d rather be in Python as much as possible. That’s healthy and it works.

You can read the rest over there.

Stripe CTF 2.0 – Web Security

I did Stripe’s Capture the Flag 2.0 this year, “a security contest where you can try your hand at discovering and exploiting vulnerabilities in mock web applications”.

It was a lot of fun. Some of the levels were quite challenging and I had to figure out how to actually implement an exploit vulnerability that I’d only read about in passing before. Each level makes you both a) figure out what the vulnerability is, and b) actually exploit it. One thing that the Stripe guys did a nice job at was spreading out the challenges between PHP, browser JavaScript, node.js, Python, and Ruby, so that developers from any one language wouldn’t have an advantage.
Read the rest of this entry »

Uploading static assets (CSS/JS) to S3 for CloudFront CDN

For a new Backbone.js + Flask project I’m using grunt + grunt-contrib, RequireJS’s r.js, Flask-Assets / webassets for static file (LESS/CSS, JS) compilation. But I needed a good way to get my nicely optimized static files onto a CDN and serving proper HTTP headers.

Using the excellent s3cmd tool, here’s what I came up with.

This example will break for browsers/proxies that don’t support gzip, but this is fine for my needs. Any other solution would either require a custom origin web server or writing different filenames in HTML depending on the request coming in. But since I want to use S3 as my origin this is the easiest/simplest solution.

Since all assets are “built” with a md5 version number hash in the file name, I want far futures headers to cache permanently.

PhilFreo.com v3 (and past versions)

I setup my first personal webpage (philfreo.com) in 2004 when I was in high school. It’s had some server-side includes and a tiny amount of logic written in ASP. It looked like this:

I redesigned it once in 2006 during my Yahoo! internship, and it looked like this:

And there my website sat from 2006 until 2012. That’s forever in internet years!

So here we are in the summer of 2012 – time for a redesign! Nothing too fancy, just clean up the styles to be more modern and representative of the current web. It should tell people about the 2012 Phil Freo rather than the high school or college version of me. It should no longer focused on my freelance website design (where I once dominated SEO for terms like “gainesville web design” and “jacksonville web design”) and now more focused on my work with startups, modern full-stack web development, and my blog.

You’re probably looking at the new site now, but for archival purposes, here are some screenshots:

Homepage:

Blog article page:

Wedding Website & Invitations

I launched my first new website in a very long time, and also designed some matching print work. This time the client was tougher than usual. But she was also cuter than usual so it was worth it…

Read the rest of this entry »

New Job with Startup: Old School Industries

I just accepted a full-time position at a small startup in San Francisco as a lead Developer and Product Manager.  The company is called Old School Industries LLC and is a combination of two businesses: Quizlet and Collectors Weekly.

Read the rest of this entry »

Technologies I’ve worked with in 2009

One benefit of doing freelance development work is that I get the opportunity to get involved in many different technologies and frameworks in a short amount of time.

Since the year is over… here’s a quick list of 15 technologies/frameworks that I got to learn in 2009 alone, during my last year in college.

Read the rest of this entry »

Book Review: “jQuery 1.3 with PHP”

I was given another book to review, called “jQuery 1.3 with PHP”, so here it is.  The book is aimed at beginners or intermediate developers wanting to learn how to “enhance your PHP applications by increasing their responsiveness through jQuery and its plugins“.

Read the rest of this entry »

Largest website width to support 1024×768 resolution

Currently, web designers are advised to support browser resolutions of widths 1024px and greater based on current browser usage data. The idea is that you want your site’s design to look good, and not require a horizontal scroll bar for those users. But screen resolution and browser width are not the same thing, because of browser chrome, scroll bars, and because many users browse without their window being maximized.
Read the rest of this entry »

ExpressionEngine: “Freo Add-on Installer” makes installing add-ons a breeze

I wrote my first module for ExpressionEngine, called “Freo Add-on Installer”, with the aim of saving EE developers a lot of time.  Here’s what it’s all about.

Read the rest of this entry »

Book Review: “Magento: Beginner’s Guide”

I was given a copy of a book called “Magento: Beginner’s Guide” to review, so here goes.  Overall, the book does a good job of giving a high-level walkthrough of all the different aspects of running a store with Magento.

Read the rest of this entry »

Fixing Safari’s 1px background-image centering bug

I’m working on slicing and CSS for a new theming project for Magento Commerce and was plagued with a CSS bug that affects WebKit (Safari and Google Chrome).  After some searching I found that several other people have had the problem, but I didn’t see a comprehensive writeup of the solution.  Here’s what I found…

Read the rest of this entry »

Notes from Google I/O Keynote 2009, day 1

Google I/O Keynote

Wednesday 5/27/2009

San Francisco, CA #io2009

Read the rest of this entry »

On OSX, svn: This client is too old to work with working copy ‘.’; please get a newer Subversion client

I got this message when trying to use Subversion on OS X through Terminal.

I checked out my svn version using “svn –version” and it said I was using 1.4.4 – so I decided to update. Here’s how…
Read the rest of this entry »

Google Summer Internship Completed / Goodbye California

This summer I had the privilege to intern at Google and spent another summer in Silicon Valley – the hub of all things tech-related. My internship lasted 10 weeks and, much like my Yahoo! internship last summer (I gave my reasons for not going back to Yahoo! this summer), I had an incredible experience.

Read the rest of this entry »

Two Websites Launched

I have two more happy clients now. I’ve launched two new websites recently: SwimmingSafari.com and Hibernicor.com

Read the rest of this entry »

Thoughts and Recap of SXSW

This post comes a bit late, but I wanted to recap my experience at SXSW Interactive 2007. I decided to diverge from the typical college spring break plan and headed out to Austin, TX for the 4-day conference covering topics such as web design, usability, blogging, and other technology.

Read the rest of this entry »

SXSW & Business Cards

With SXSW coming up, I decided to make up some quick business cards and have them printed through OvernightPrints.com. I can’t believe SXSW (and Spring Break) is only a week away, but I am excited and looking forward to learning a lot and meeting some great people.

Read the rest of this entry »

CSS Tabs, BrowserCam, and Temporary Email Addresses

After spending time today with frustrating IE6 CSS issues with borders on ul and li tags, I finished my CSS navigation tabs. The CSS is based on the XHTML produced by the WordPress K2 theme, but can be easily matched for any site.

css for k2 theme tabs in wordpress Read the rest of this entry »

Next Page »