In the previous post, I wrote about improving Cushion’s navigation with a better sidebar navigation. I have since given users a heads-up about that change, and the pull request is ready to deploy this weekend. In the meantime, I’ve been thinking of next steps. In that post, I talk about my plans for the overall structure of the app, and one part of that plan includes top-level sections for clients and projects.


Looking back at the original UI for Cushion from 2014, I actually started with top-level sections for clients, projects, and invoices. Back then, I only had the scheduling view and the budgeting view, so those were actually a toggle versus proper sections. Seeing clients, projects, and invoices on the top-level reminded me how clear and simple that was. At some point, I strayed from that simplicity, and clients and projects became sub-tabs within sections—strangely buried as an extra step.

After years of being out-of-touch with this unnecessary friction, I’m ready to bring clients and projects back to the top-level nav. If a user wants to see a list of their clients, they should be able to click a single section—not think of which view they want to go into first, then select the clients tab. As for invoices, for now, I’m keeping the “Invoice” section that’s adjacent to the other “action-based” sections, like “Schedule”, “Budget”, and “Track”. That makes more sense to me versus treating invoices like a top-level object rather than an action.


I’m still in the early stages of what this “Clients” section will include, but the main goals are to have a single place where users can search and filter a list of clients, import clients via generic CSV/spreadsheet files, and apply batch actions to multiple clients. I have a clear idea for how I want to achieve these goals, but the details of the client list are still fuzzy, so I’m keeping it dead-simple for now with income amounts. I definitely want to provide users with the most useful details, so I’ll be chatting with them, instead of just filling the empty space with data that might not be as useful.

On the importing side, I’ve relied on my custom integrations with other services throughout most of Cushion’s life, but this approach has countless downsides, including maintaining these custom integrations and relying on 3rd party services. Going forward, I’m going to build an import system for generic CSVs that doesn’t need to follow a specific column format, but instead lets you pick the columns that apply to the properties of the client. So, if a user uploads a CSV, they’ll see several fields for the client and dropdowns for CSV headers. In Cushion, the name property is “Name”, but in their CSV it might be “Client name”. Instead of trying to magically match these automatically in the background without any tweaking or correction, I’ll first give it my best shot, then let the user confirm or manually tweak. I’m excited about this system because I think it can easily apply to any data worth importing into Cushion—clients, projects, invoices, etc.

As for batch actions, this will be a new approach in Cushion to let users simplify repetitive tasks. If a user needs to archive a handful of clients, they’ll be able to select those clients and hit archive once. If they want to export a specific group of clients, they can easily select and export only those clients. I don’t think I’ll go as far as batch editing specific properties, because I don’t think that’s a realistic need, but batch actions will certainly come in handy for items like invoices, where you might want to mark several as paid.

Overall, I’m probably more excited than I should be about these new top-level sections, but I think that’s because they’ll go a long way for most users. They’re also somewhat easy, in the sense that they don’t have any graphs, etc., but I might’ve just jinxed myself by saying that. If you’re a Cushion user and have any suggestions for the details that should go into the client list, let me know! As always, I’m all ears.