Buying a car with Carvana

Standard

Recently our old car finally went down. Years ago the trade was worth $500 so I was happy to get $500 for it now. Though what a terrible time to buy a car with dealerships having low inventory.

We ended up going with Carvana because we could see what the actual price of the car, plus taxes, title, etc was going to cost us. Have you tried looking online at a dealership to see if they have a car you want? We were looking at some base models that had an MSRP in the range we were comfortable. When we browsed a few of the local dealerships they all had “MSRP: xx,xxx” but no actual price. When I reached out, with a link, even a VIN of a car I wanted they still couldn’t tell me the price they were selling it at. I had to drive there to see the actual car, as they may be reusing a listing with the same make, model, trim. With one dealer I did get them to tell me they were doing ‘market adjustments’ between $3,000 to $7,000 on top of the MSRP. The same dealer had a ‘dealer fee’ of $899 hidden in small text on their website.

The Buying Process

We had already been looking at EVs on Carvana to get an idea of those prices and alerts if one popped up so I already had an account. We didn’t end up getting an EV. Once my wife and I settled on a car, and played with the down payment to monthly slider we hit the buy now button. We started through the process which included filling out the typical name, address, drivers license stuff. It did have us move to their mobile application to make it easier taking pictures of my drivers license and uploading it. It was probably 20 minutes of my time spent. Like all dealerships they offered a handful of warranty options and even mentioned the current powertrain warranty and the one Carvana comes with. There wasn’t really any pushiness to pick one of the additional ones. We completed the electronic paperwork and went to bed.

The car we picked was to be delivered in 3 days time. So there were a few other tasks we had to complete. The first thing was Carvana wanted to verify we actually had the funds we were committing to the downpayment. They offer Plaid which can work with some banks to instantly verify, unfortunately it did not work for my bank. I called, got a Carvana person on the line pretty quick and we did a 3 way call with the bank. “Can you confirm that Jeff has at least $[downpayment] in the account ending in [last 4 digits of the account number]”. The bank said yes and that was it. The other task was to provide proof of insurance. The have some sort of affiliate insurance company they offer, but the prices were not competitive with my current insurance. I uploaded the proof of insurance and they were accepted.

Delivery Day

Next up was delivery day. The Carvana delivery driver showed up a few minutes early to our scheduled time. He unloaded the car, asked for my drivers license and proof of insurance. While he was completing paperwork on his end, I looked over the car and took it for a test drive. The car was great. Once I got back, we looked it over much closer, made sure we knew how to open the gas cover (is there a button? do you push it in and it pops out?, etc) and anything else. We agreed that we will take possession of the car. After that, I went inside and electronically signed the title paperwork.

7 Days

We had 7 days to return the car. Once the days were up, they filed the paperwork with the state we live in for the title and registration. Today the registration and license plate showed up and we are all good.

There are news stories in Florida, and other states about title and registration issues when buying a car with Carvana. I was a bit worried we would be one of those people, but it doesn’t look like thats the case. I was able to verify with the state the title and the names on the registration are good.

Improvements Carvana Could Make

There were only a couple of things I found confusing during the time we were buying the car.

  1. Once we got a quote from the insurance company they offer, and declined, a second ‘verify insurance’ task popped up. One was ‘Insurance verification’ and the other was ‘Insurance Verification’. Notice the capital ‘V’ on the second one. I uploaded the same document to both, so maybe it was just an edge case. See the screenshot below.
  2. On delivery day, hours before the delivery, I received the title documents to e-sign with instructions ‘sign these and we will tell you the next steps’. a. I am not going to sign the paperwork for a car before I accept it. b. Part of it was verifying under the penalty of perjury the mileage was accurate. Waiting to sign the document didn’t cause any issues, it was just confusing.
  3. When we were originally looking at EVs before seriously considering buying a car. I went through the pre-approval process that doesn’t hit your credit. Even after we bought the car, I still get their marketing emails for that pre-approval. Its like when you view a product on a big box website and ads for that product follow you around the internet after you went and bought it in store. Except here, I still purchased it online so they should know to stop emailing me.
Carvana 2 insurance verifications
2 Insurance Verifications

Finishing Up

Overall I am very happy we went with Carvana. The process was quite smooth. There weren’t any pushy sales people trying to close the deal, we knew how much we were paying for the car and the monthly payment before we even started the process to buy the car. The total time I spent dealing with the ‘buying process’ was probably a little over an hour. No sitting around waiting for the finance guy to finish up with the person before us.

Shopify App Bridge and React Router

Standard

I recently started building Shopify apps and ran into a problem with an embedded app and getting the URL change to reflect in the browser. The iframe would update, and I would be on the page, but the URL in the browser wouldn’t update. While not a critical feature, it’s sure annoying if you refresh the page and you can’t get the exact page on because instead of /orders/10 the URL only shows /orders/.

I spent hours researching how to do it, and found either out-of-date comments or things half done.

The not so obvious RoutePropagator is what you are looking for. After following the setup for the ClientRouter, the missing piece was adding in the RoutePropagator where I define my main <Switch> and <Route> statements.

//App.jsx
import { useRoutePropagation } from '@shopify/app-bridge-react';

function App({ location }) {
    //the magic was right here
    useRoutePropagation(location);

    return (
      <Switch>
          <Route path="/settings" component={Settings} />
          <Route path="/plan" exact component={Plan} />
          <Route path="/" exact component={Dashboard} />
      </Switch>
  );
});
//AppRouter.js
import {withRouter} from 'react-router'
import {useClientRouting} from '@shopify/app-bridge-react';
//Setup with the ClientRouter hook
function AppRouter(props) {
    const {history} = props;
    useClientRouting(history);
    return null;
}

export default withRouter(AppRouter);
//index.js
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import { BrowserRouter, Link } from 'react-router-dom'
import { Provider as AppBridgeProvider } from '@shopify/app-bridge-react'
import enTranslations from '@shopify/polaris/locales/en.json';
import {AppProvider as PolarisProvider} from "@shopify/polaris";
import config from './config';
import AppRouter from './AppRouter';
import { createStore, applyMiddleware } from 'redux';
import { Provider as ReduxProvider } from 'react-redux';
import '@shopify/polaris/dist/styles.css';

import rootReducer from './store/reducers/rootReducer';
const store = createStore(rootReducer, []);

const paramsSearcher = new URLSearchParams(window.location.search)
const findOrigin = paramsSearcher.get('shop') || 'test.myshopify.com';

window.sessionStorage.setItem('shopifyDomain', findOrigin);

const shopifyConfig = {
    apiKey: config.API_KEY,
    shopOrigin: findOrigin
}

const CustomLinkComponent = ({children, url, ...rest}) => {
    return (
        <Link to={url} {...rest}>{children}</Link>
    );
};

ReactDOM.render(
    <React.StrictMode>
        <BrowserRouter>
            <AppBridgeProvider config={shopifyConfig}>
                <ReduxProvider store={store}>
                    <PolarisProvider i18n={enTranslations} linkComponent={CustomLinkComponent}>
                        <AppRouter />
                        <App />
                    </PolarisProvider>
                </ReduxProvider>
        </AppBridgeProvider>
        </BrowserRouter>
    </React.StrictMode>,
    document.getElementById('root')
);

Shopify Polaris and the missing placeholder

Standard

I have recently been working on a Shopify app and came across a minor annoyance with a ResourceList that I solved, and then figured out why it was happening.

When adding a filter, it provides a search box, and all the examples had a placerholder in it, except mine did not have the placeholder.

While a minor thing I dug into the Shopify code and found I could pass in a queryPlaceholder property to set my own placeholder.

By setting the specific text it showed up just like I wanted. However in the component code you can see it will set a default placeholder if you don’t provide one.

When going back through the getting started directions, there is a spot to load english translations and that is what I was missing. It was an easy thing to miss but if you are missing a default placeholder, make sure you loaded the translations!

Darn Nest had my wires reversed

Aside

I was installing a Nest in the new house and the thing was only blowing out hot air even while on cool. I ended up calling an HVAC company and they came out and switched 2 wires. For some reason Nest has them switched on their wire guide or my A/C is odd.

Building a ‘todo’ app

Standard

A lot of the frontend frameworks go through building a basic todo app. However building a feature rich one is considerably much harder.

During my day to day work we use Basecamp 2 and 3, Youtrack and several other tools. All of them have their strengths and their weaknesses. I wanted a todo app that was simple but allowed things like meta data, kanban boards and what not. Therefore I have built Todo Sage that includes these features.

Along with those features we include an Idea Board for voting on features. As you are building out your roadmap it helps to figure out where your team wants to go. The idea board allows you to vote multiple times for a single idea if allowed, and have a maximum number of votes. These are both configurable and help you really get to the features your team wants.

While my use case has been developer centric, it works for all sorts of projects. If your clients need access, invite them to the project and they can start interacting with you. For companies that do a lot of similar projects like setting up clients sites, we offer ‘Project Templates’ that you can build and scaffold entire projects with the click of a few buttons.

Todo Sage fills the gap of one application having some features and another application having other features.

Switching to Netlify

Standard

Corporate or marketing sites often times don’t need full blast content management systems. It’s also nice to have the marketing site on a different server than the web application. After doing a side project that uses Jekyll and Cloud Cannon for the CMS it got me thinking on setting up an easy to use jekyll site. Since these sites don’t get updated often, and when they do, it’s often by a developer, we don’t need a CMS. Writing basic HTML will work just fine.

While browsing the Jekyll documentation they mention Netlify. To my surprise they offer a free plan that even includes SSL with Lets Encrypt.

They offer the ability to use forms, their DNS servers, and even add custom environment variables when building your site.

As for their git providers, they support Github, Bitbucket as well as Gitlab (hosted). When pushing code to the repository on the master branch, it will automatically pick it up and rebuild the site.

If you are interested in static sites without the mess of a database, or long load times on lousy oversold WordPress shared hosting, checkout Netlify.

*Note: There is no referral links nor paid advertising. I personally use them and think they are a great choice for sites that don’t change a whole lot. Often times people jump to WordPress, Joomla, etc because they are easy to setup and not necessarily the right tool.*

#LongmontStories where did you go

Standard

If you follow me on Facebook you may have come across my #LongmontStories posts. These are weird things that I witnessed while working on Main St in Longmont, CO. Unfortunately we moved offices, and although we are still on Main St. I don’t have a direct view of the door anymore. I am therefore limited to the times I am walking outside.

When is it ready?

Aside

When is the app I am building ready for the world to see? There is always more cleanup, more features, blah blah blah to keep the development process going. Meanwhile at work, I am fighting off ‘cool features’ for the sake of of being ‘cool’.