Cushion Project blocks
Cushion Redesigning the homepage
Cushion Multiple timelines
Cushion Archiving and estimate differences
Cushion Multiple financial goals
Cushion Zooming in on the timeline
Cushion Currency
Cushion Preferences, accounts, and typeface change
Cushion Sending out the first email
Cushion Currency inputs, notifications, and invoice nets
Cushion Dots and lines
Cushion Calculating in the database and revealing tendencies
Cushion Improved form UX
Cushion Cushion is online
Cushion Schedule timeline patterns
Cushion A slimmer schedule timeline
Cushion The schedule timeline
Cushion Plugging in real data for the first time
Cushion Transitions and project lists
Cushion Death to modals
Cushion The individual project page
Cushion Estimated incomes and talks with other freelancers
Cushion Statuses to lists and the paid beta
Cushion The timeline
Cushion Invoice terminology
Cushion Modal forms
Cushion Wiring the backend to the frontend
Cushion Balancing design and dev
Cushion Timecop, Monocle, and Vagrant
Cushion Going with Ruby and Sinatra
Cushion Ditching local-first and trying out Node.js
Cushion Switching to AngularJS
Cushion Building the Table with Vue.js
Cushion Clients, Projects, and Invoices
Cushion Introduction (to the Cushion journal)
Cushion Cushion
2014
Cushion Retention through useful features
Cushion The onboarding checklist
Cushion Spreading the word
Cushion From beta to launch - the subdomain
Cushion From beta to launch - sign up
Cushion From beta to launch - messaging
Cushion Launch
Cushion Authenticating with 3rd party services
Cushion Intro to integrations
Cushion Inspiration vs imitation
Cushion The emotional rollercoaster
Cushion Designing project blocks
Cushion Everything in increments
Cushion Deleting your account
Cushion Designing the subscription page
Cushion Rewriting the timeline
2015
Cushion Funding Cushion
Cushion Hiring a team of freelancers
Cushion Taking a real break from work
Cushion Slack as a notification center
Cushion Document your features
Cushion 300
Cushion Vacations
Cushion Offering discounts
Cushion Waves of traffic
Cushion Less blogging, more journaling
2016
Cushion My typical week as a founder
Cushion Building components in a sandbox
Cushion Reactive time with Vue.js
Cushion Visualizing daylight saving time
Cushion Recording screencast GIFs
Cushion Writing a job listing
Cushion Using feature flags to run betas
Cushion Our first company lunch
Cushion How to embed Vue.js & Vuex inside an AngularJS app... wait what?
2017
Cushion The “Update Available” alert
Cushion Improving readability with bigger fonts and higher contrast
Cushion My design workflow
Cushion Simplifying our build process and SSL with Cloudfront
Cushion Restructuring an evolving app
2018
Cushion The new invoice page is live
With only days before the SCA deadline, I launch the new invoice page with to be SCA-ready while also paving the way for more improvements.
Cushion Integration testing the invoice page with Cypress
Wrapping up my work on the invoice page, I set up integration testing using Cypress to make sure that everything continues to work end-to-end.
Cushion Tidying up as you go
Continuing to make progress on the invoice page, I talk about some of the ways I’m improving the codebase along the way.
Cushion A subsidized plan for 2021
A chat with a user leads me to consider a subsidized plan for the New Year to help folks through the pandemic.
Cushion Redesigning the invoice page for SCA with Stripe Elements
I pause work on the account page to make sure Cushion’s invoice payment integration is ready for the SCA deadline.
Cushion Rethinking the pricing page
In needing to redesign the pricing page for the new account section, I decide to rethink the structure of Cushion’s existing plans.
Cushion A dev’s troubleshooting journey
An innocent bug report unfolds into a roller coaster ride of a troubleshooting journey.
Cushion Scaffolding the account page
As I begin building Cushion’s new account page, I start by scaffolding a static version of it and building the components it requires.
Cushion Redesigning the account section for SCA with Stripe Billing customer portal
With SCA regulation going into effect at the end of the year, I prioritize migrating to the Stripe customer portal, which means redesigning the account section.
Cushion Designing a new layout system
After years and years of incrementally tweaking the design of Cushion, I take a holistic look at the layout system.
Cushion Redesigning the blog
After redesigning Cushion’s homepage, I take the next step in migrating to Contentful by rethinking the blog.
Cushion Animating the new homepage hero
To keep my mind busy while dealing with a tough time, I distract myself with Cushion’s new homepage animation.
Cushion Responsive images for different layouts
While building Cushion’s new homepage, I go the extra mile to swap out better-fitting images for different breakpoints.
Cushion A flexible way of using Nuxt.js with Contentful CMS
After migrating Cushion’s changelog to Contentful, I move onto the homepage, where I narrow in on an approach to compose pages entirely in the CMS.
Cushion Migrating the changelog to the Contentful CMS
In my initial step towards migrating Cushion’s marketing site to Contentful, I start with the changelog.
Cushion Promoting invoicing to the main nav
I reworked the main nav to include invoicing, which was met with a wave of thanks from users.
Cushion The next big rocks
After launching Cushion’s new onboarding, I detail the next few items on my to-do list, which for once are not new features.
Cushion Onboarding is live
A weekend turned into a month, but Cushion’s new onboarding is finally live. Instead of focusing on the launch itself, I talk through my favorite part.
Cushion Composable onboarding
To provide a more pleasant codebase for Future Jonnie to inherit, I restructure the onboarding to be composable and easily testable.
Cushion Writing my own utility methods
I decide to write a few utility methods myself, rather than relying on 3rd party library, and I’m glad I do.
Cushion Using a utility library vs building my own
Torn between adding a dependency for a utility method or writing it myself, I talk through the pros and cons of both approaches.
Cushion A reminder to write
Determined to launch thew onboarding flow, I forgot to write for a week and it shows.
Cushion The date picker component
Continuing my work on Cushion’s onboarding flow, I build a new and improved date picker component.
Cushion Building components for the long run
With my recent work on Cushion’s new onboarding flow, I take a meandering walk through the new components I built for it that are all typed and tested.
Cushion Investigating inflection points
Stepping back to look at Cushion’s growth over its entire lifetime reveals a crystal clear moment when everything went south.
Cushion Recalibrating my estimates
I start working on the new onboarding flow, but quickly realize it won’t be a weekend project.
Cushion A friendly onboarding flow
As a first stab at onboarding, I design a flow that includes myself asking questions, which hopefully provides a friendly intro to the app.
Cushion Bringing back onboarding
In an attempt to ease people into the app rather than pushing them out of the airplane, I decide to bring back a proper onboarding flow.
Cushion Rough sketches
After feeling reluctant to reveal any design progress, I decide to bite the bullet and share a few rough sketches—no matter how uncomfortable it feels.
Cushion Flattening the nav
Continuing the idea of the single click, I talk through a potential path to flattening the nav from multiple layers down to one.
Cushion Well, this is embarrassing
Browsing through Cushion, I realize something strange. As I troubleshoot the anomaly, I discover an embarrassing truth.
Cushion Sending newsletters again
I sent my first Cushion newsletter in over a year and a half, which sounds crazy, but nonetheless, it feels great to send them again.
Cushion Validating assumptions
Before diving into analytics, I decide to spend time writing database queries that could validate some of my assumptions using existing data.
Cushion Intentional analytics
After building Cushion so far based purely on assumptions and intuition, I finally start to think about using analytics to help guide me.
Cushion This app has good bones
A thought-provoking conversation leads me to realize that Cushion is still solid and worth iterating on, instead of restarting from scratch.
Cushion Keeping API requests simple
After establishing a new guiding principle to keep API requests simple, I describe how I could refactor a complex view that relies on a heavy API request.
Cushion A single click
I discuss a pain point in the current Cushion involving the number of clicks it takes to get to where you need to go. What if it only took one?
Cushion Shaping Vuex through testing
Cushion Excluding a folder from VSCode’s search (and disabling Jest’s generated coverage reports)
Cushion Retaining state with the router in a single page application
Cushion Custom focus rings using :focus-within
Cushion Testing v-on="$listeners" in Vue.js
Cushion Vue + ESLint + Prettier conflicts
Cushion Speeding up Jest tests with --runInBand
Cushion Moving the Cushion Journal to my blog
Cushion Updating Sentry
Cushion Updating Skylight and dealing with ActiveSupport
Cushion Reducing Heroku CI time by 35% for an extra penny
Cushion The build failed, but I swear it wasn’t me
Cushion A hiccup with subdomain routing
Cushion Upgrading to Ruby 2.7.1
Cushion QA’ing pull requests using Heroku Review Apps
Cushion Subdomain routing in Sinatra
Cushion Redirecting the Heroku “Open app” button to a custom domain
Cushion Reloading Ruby with Sinatra::Reloader
Cushion Exploring a modern Cushion
Cushion Migrating the Cushion website to S3 to avoid dealing with SSL
2020
Cushion 7 years old
With Cushion reaching the 7-year mark, I reflect on its life and plot a course for its future.
Cushion Thinking through a new invoice form
At the fork in the road, I choose the invoice form as the next step in renovating Cushion, including a long-awaited list of improvements.
Cushion The calm after the sprint
With a couple big launches behind me, I think about what to tackle next or whether I need to pick a direction just yet.
Cushion The new account page is live
After launching Cushion’s new invoice page last week, I launch the new account page this week with a ton of other goodies.
2021