Our Blog

Ongoing observations by End Point people

The End Point Design Process

By Jon Allen
March 14, 2018

Designing for the web means more than just creating beautiful websites — whether it’s a marketing site, an ecommerce platform, or a large-scale web application, thoughtful design means better, more intuitive user experiences. The design process provides a roadmap for developers and a shared set of expectations for the clients of what the final product will be.

If you’ve contracted End Point for design work, or you’re considering it, this post will show you all the steps as we go from an initial concept to a polished design that’s ready for development. You’ll also learn the basic vocabulary of deliverables and some of the tools involved in the process.

Phase I: Discovery

Every new app, website, or product starts with an idea. The initial phase of design work means clarifying that idea — defining its boundaries and goals. Thorough research and investigation are critical for setting the path to success. We interview our clients’ staff, stakeholders, and users to get a comprehensive picture of the current marketplace, discover any pain points in existing workflows, and learn what we can do to make things better. We also take an in-depth look at existing content and, with the client, decide what should stay, what should go, and what needs to be updated or refreshed.

At the end of this process, we provide our clients with a new sitemap, interview transcripts, and a detailed strategy document. Depending on the client’s needs, we may also produce user flow diagrams, user personas, taxonomies, and a content migration plan.

Phase II: Sketching and Wireframing

Once the research materials have been gathered, content has been analyzed, and a design strategy is in place, we make sketches, diagrams, and rough mockups so that everyone involved in the project can start to see the overall form of the final product. At this stage, concerns about font, color, or graphics are mostly off the table — we’re focused on how the parts of the application fit together to create a great...


Rails Active Storage

By Gaurav Soni
March 12, 2018


Active Storage is a new feature of Ruby on Rails 5.2 that provides functionality to upload files to the cloud, currently Amazon Web Services, Google Cloud, Microsoft Azure.

This gem attaches pointers to uploaded files to the Active Record object. It uploads the file asynchronously which reduces app server overhead, and it also doesn’t require adding a background job explicitly. Active Storage by default uses Active Job to upload the files.

Features of Active Storage

Mirror Service: This allows synchronization of the file between multiple cloud storage services. For example we have this config/storage.yml:

  service: Mirror
  primary: amazon
    - azure
    - google

The Mirror service first uploads files to Amazon S3. After that it pushes to Azure and Google Cloud. When we remove the file then first it removes it from Amazon S3 and after that it removes it from Azure and Google Cloud. This service is very helpful when we are migrating from one cloud to another.

Direct Uploads: Active Storage comes with a JavaScript library activestorage.js. By using this library we can upload files from the front-end browser to cloud storage directly. Some events that are provided by the activestorage.js library are direct-upload:start, direct-upload:initialize, and direct-upload:progress.

Asynchronous Upload: Active Storage uploads files asynchronously to the cloud. It doesn’t require adding any background job to upload files asynchronously. It uses Active Job to upload files to the cloud.


In Rails versions before 5.2, add the following to your Gemfile:

gem 'activestorage', github: 'rails/activestorage'

In Rails 5.2 active store comes by default.

To install into your application:

rails activestorage:install

This generates two tables active_storage_blobs and active_storage_attachments.

Then run:

rails db:migrate

Suppose we have model User and we need to upload the profile picture of that user.

class User < ApplicationRecord...

ruby rails

Vue in Ecommerce: Routing and Persistence

By Steph Skardal
March 1, 2018

Vue Shop created by Matheus Azzi

I recently wrote about Vue in Ecommerce and pointed to a handful of references to get started. Today, I’ll talk about using vue-router in a small ecommerce application, combined with vuex-persist for state storage.

I forked this Vue Shop on GitHub from Matheus Azzi. It was a great starting point for to see how basic component organization and state management might look in a Vue ecommerce application, but it is a single page ecommerce app with no separate page for a product detail, checkout, or static pages, so here I go into some details on routing and persistence in a Vue ecommerce application.

Vue Router

In looking through the documentation, I don’t see a great elevator pitch on what it is that Vue Router does. If you are new to routing, it’s a tool to map the URL request to the Vue component. Since I’m coming from the Rails perspective, I’m quite familiar with the Ruby on Rails routing from URL pattern matching, constraints, resources to Ruby on Rails controllers and actions. Vue routing via vue-router has some similar elements.

When you create a basic Vue application via vue-cli, you are given the option to include vue-router:

vue init webpack myapp

? Project name myapp
? Project description A Vue.js project
? Author Steph <steph@endpoint.com>
? Vue build standalone
? Install vue-router? (Y/n) 

If you select Yes here, the main differences you’ll see are that an application with vue-router installed will call <router-view/> to render the view for the current router, instead of a <HelloWorld/> component, and that a vue-router app will include src/router/index.js with basic routing configuration to your <HelloWorld/> component.

Without Routing

// App.vue without vue-router
  <div id="app">
    <img src="./assets/logo.png">

import HelloWorld from './components/HelloWorld'

export default {
  name: 'App',
  components: {

With Routing

// App.vue with vue-router...

ecommerce vue javascript open-source

Vue and Ecommerce: An Introduction

By Steph Skardal
February 19, 2018

Vue Shop created by Matheus Azzi

I speak the domain specific language of ecommerce, Ruby on Rails, JavaScript, and jQuery. Lately, I’ve been getting up to speed on Vue.js. I’ve been working on writing a small ecommerce site using Vue.js, because for me, creating an application addressing familiar paradigm in a new technology is a great way to learn.

Vue.js, initially released about 3 years ago, is a lightweight JS framework that can be adopted incrementally. In the case of my small example site, Vue.js serves the frontend shop content and connects to a decoupled backend that can be run on any platform of choice. On my path to get up to speed on Vue, I found great resources that I wanted to write about before I get into the details of my ecommerce app. Here they are:

  • First, I started with the Vue.js documentation. The documentation is great as a starting point to understand some of the terminology. I often don’t love the documentation that comes with technologies, but I found the Essentials section in the Vue documentation to be a great launching point.
  • After I worked through some of the Vue.js documentation, I did a simple search for “vue jsfiddle” and experimented with a few of those fiddles. Having come from a jQuery background (with mustache), I was familiar with how templating and logic inside a template might work, but less familiar with the vue instance and binding, so I targeted jsfiddles with this in mind.
  • Next, I looked for resources with Vue + ecommerce specifically. Here’s where I found some good stuff:
    • Scotch.io Course on Vue + Ecommerce: This online course has a great amount of overlap with the main documentation of Vue, but some of the examples are ecommerce specific, which serves as a good introduction.
    • Vue + Third Party Integration for Ecommerce: This Medium article talks about integrating third party tools used with Vue (Stripe, AWS S3, Heroku) to build an ecommerce site. While this post doesn’t go into the nitty gritty details of a Vue application, it does provide many code...

ecommerce vue javascript open-source

Sunsetting Piggybak, A Ruby on Rails Ecommerce Gem

By Steph Skardal
February 14, 2018

Screenshot of website for Piggybak: Open Source Ruby on Rails Ecommerce

Hi there! I’m Steph, the original creator and not-very-good maintainer of Piggybak, a modular ecommerce platform written in Ruby on Rails. With the help of End Point, I created Piggybak after building a custom Ruby on Rails ecommerce application for one of our clients here at End Point.

My goal with Piggybak was to create a lightweight, modular ecommerce platform in the form of a Ruby on Rails gem that could be combined with other Ruby on Rails gems for quick setup. Over the years, End Point has had much success working in Interchange, an ecommerce framework written in Perl. The web stack has evolved greatly over the years, as has the capacity for modularity and the ability to decouple front-end and back-end architecture.

Fast forward about 4 years after Piggybak was released, and we’ve decided to retire it. Not only did I leave the maintenance up to End Point after I left to work as an in-house software engineer for the last couple of years, but I was also in a position to evaluate using Piggybak as the base for a custom solution.

While I think there are some great Ruby on Rails gems to help support your ecommerce application (see below), one of the main things I realized was that the modularity in Piggybak often doesn’t suit the needs for the target audience of custom Ruby on Rails ecommerce platforms.

These days, here’s my oversimplified categorization of those looking for ecommerce solutions, divided into two audiences:

Audience #1: Boilerplate Saas with Theme Customization
Those sellers where boilerplate ecommerce solutions work, with simple product and variant modeling. Shopify, Magento, BigCommerce, WooCommerce can be decent popular options for that audience, but there are so many other options out there.

Audience #2: Custom Ecommerce in Ruby on Rails
Companies going this route have custom enough needs where a small team can develop and maintain a custom solution, using Ruby on Rails efficiently that don’t require them to depend on a pre-existing data...

ecommerce ruby rails open-source

Liquid Galaxy at the Pyeongchang 2018 Winter Olympics

By Dave Jenkins
February 13, 2018

Liquid Galaxy showing Pyeongchang Olympic venues

The Winter Olympics are in full swing in Pyeongchang, Korea! We’re proud to note that we have a full Liquid Galaxy running onsite there as well.

Our Seoul-based partner, AZero, has been working closely with KEPCO, the Korean power company, to bring Liquid Galaxies to several of their visitor centers scattered throughout South Korea. KEPCO utilizes the Liquid Galaxy to showcase their infrastructure elements of hydroelectric dams, large power stations, and substations to show how they bring electricity to the 40M+ people living in South Korea.

Liquid Galaxy showing aerial view of mountains around Pyeongchang

As a lead corporate sponsor of the games, KEPCO wanted to bring that same story to the Olympic venues. AZero developed new content that highlights the Olympic venues and Pyeongchang area and deployed the Liquid Galaxy at the Gangneung branch office (near Pyeongchang, and also a host of several Olympic venues).

Now that the games are in full swing, KEPCO is bringing VIPs, government officials, and a global list of business contacts to their center, and is using the Liquid Galaxy as the central platform to present their accomplishments.

Liquid Galaxy showing aerial view of South Korea

If you’re in Pyeongchang, why not take some time to see this incredible immersive platform?

End Point is looking forward to further cooperation with AZero in Korea, as well as our partners in Japan for the 2020 Olympic games that will be held in Tokyo.

liquid-galaxy event clients

Regionation with PostGIS

By Josh Tolley
February 8, 2018

Coral reefs map

Recently a co-worker handed me a KML file and said, in essence, “This file takes too long for the Liquid Galaxy to load and render. What can you do to make it faster?” It’s a common problem for large data sets, no matter the display platform. For the Liquid Galaxy the common first response is “Regionate!”

Though your dictionary may claim otherwise, for purposes of this post the word means to group a set of geographic data into regions of localized objects. This is sometimes also called “spatial clustering” or “geographic clustering”. After grouping objects into geographically similar clusters, we can then use the KML Region object to tell Google Earth to render the full detail of a region only when the current view shows enough of that region to justify spending the processing time. Although the “Pro” version of Google Earth offers an automated regionation feature, it has some limitations. I’d like to compare it to some alternatives available in PostgreSQL and PostGIS.

Data sets

For this experiment I’ve chosen a few different freely available datasets, with the aim to use different geographic data types, distributed in different ways. First, I found a database of 49,000 on-shore wind turbines across the United States. The data set represents each turbine with a single point, and annotates it with its type, manufacturer, capacity, and many other characteristics. In this sample image, notice how the data are distributed, with compact clusters of many points, scattered sparsely across the landscape.

Wind turbine dataset

I wanted data sets with different types of geometric objects, so the second data set I chose describes geologic fault lines within the United States as multiple strings of connected line segments, comprising what’s known as a multilinestring object (see the OpenGIS Consortium Simple Features for SQL specification for more details on multilinestring data and other GIS data types in this document). Like the wind turbine data, this dataset also annotates each fault with...

postgres gis liquid-galaxy

New Tools — Old-Fashioned Project Management

By Elizabeth Garrett Christensen
January 24, 2018

A productive meeting
Photo by Kennisland, CC BY-SA 2.0, cropped

In the last year at End Point, I’ve managed projects in Trello, JIRA, Redmine, Basecamp, RT (Request Tracker) and a few others. The market of project management tools is wide and varied…​and they are all great. Well, maybe that’s a topic for another post.

However, I’ve been thinking lately—as I kick off yet another project—that no matter what tool you use for managing your project there are some fundamentals you should never forget. For those of you deep in the mud of project management tools I have some reminders for you:

Communicate with your client

No matter what tool you use to manage development, don’t let fancy apps or tools take the place of actual one-on-one time with your client. Hearing from them in their own voice about their needs and how the project affects their business and goals is invaluable. No project can succeed without the stakeholder’s vision.

Don’t stop talking to your client once the proposal is written or the project scope is done…​create a way to talk to them often. Talking to your client can take many forms, but an old-fashioned phone call is always a good way.

Show measurable progress

I have noticed that the more granular your project management tools are, the harder it is to see the big picture. Don’t forget to take time out of the day-to-day project to create a way to show your clients and stakeholders regular progress.

Even if you’re tracking each individual feature in a project management tool such as a Trello board, remember to merge it all into one development site your client can see.

Support your team

Even though you can run a report and show your team how many tickets they’ve done or how many issues they’ve closed, reach out and support your team on an individual level. Congratulate them on successes publicly and personally, outside of your management system. Talk to them about failures and create a path to repair and support them with future work.

Sometimes just having a...

Page 1 of 171 • Next page

Popular Tags


Search our blog