Tiller Data - Read Only Data Visualizer

Overview

A standalone web service (open source!) that I am building to easily drill into and explore the information trapped in my Tiller spreadsheet. Sometimes Google Sheets is just too slow, or you’re worried about accidently making changes when your really just trying to investigate your habits and gain insight into your own spending.

This is a Read Only application that imports your transactions (locally in the browser only) and lets you explore them.

Installation

That’s the best part! There is basically no installation. You can fork your own version and with just a couple easy steps have your own version running! Full installation notes provided on the GitHub repo. I really tried to make it as beginner friendly as possible for the widest accessibility.

You can try out my instance currently running on GitHub Pages:

Thanks @Darin for the GitHub Actions add-on!

Setup

All you need to do is export your transactions sheet as a CSV and upload it to the page.

Usage

I plan to use this tool during my regular financial reviews to make it easier to QUICKLY drill down into my spending and see what happened without any fear of hurting anything or making unwanted changes.

Category Naming Conventions

I have designed this tool to support 1 or 2 tier categories at the moment: (3+ is planned)

  • Food - Restaurants
  • Food - Fast Food
  • Rent

Transactions with hyphenated categories will show up first under the parent category of Food with automatic sub categories of Restaurants and Fast Food showing up under it. They must be separated with a hyphen (not em-dashes) to be recognized as a new tier.

Non-tiered categories like Rent can be used at the same time as tiered categories.

Security Implications

IF YOU USE A SHARED BROWSER - Other people who share your browser LOCALLY will be able to see your imported data unless you remove it!
After using the app, you can use the app’s built in delete functions or you can clear your browser cache / site data for the site before you get up.

Permissions

Ya! clone it, fork it, steal it, borrow it, return it dirty, whatever you want.
If you want to contribute to it let me know and we’ll set something up. (this is my first real coding project with potential for contributors)

Notes

Anything else you’d like people to know?

This is a work in progress and there are bound to be bugs. For example, I have not tested it in all ways it can fail, so I’m sure there are a handful of way to break the logic. If you find a break, let me know and I’ll do what I can to fix it.

FAQ

Does it Work with Excel?
It should. There should be no reason for it not to work. When I have a confirmation of Excel compatibility, I’ll update it here.

Does it work with my Groups in Tiller?
No, unfortunately it will not. The groups information is stored elsewhere in your Tiller Sheet and is not exported with the transactions. Therefore it cannot be read by the data visualizer.

How does it work?
It reads your exported CSV file and looks for specific column names that happen to match Tiller’s naming structure then imports it all into your browser’s built in database storage. (browser data)

Is it Secure?
It’s as secure as your device is before you used it. All your data is stored as browser data in your device’s browser and never touches the internet. For full OPSEC, you should clear your browser data after analysis so that the only location your personal data is stored is that exported CSV and your secured Tiller Sheet.

Reminder to users considering executing code-based workflows:

  1. Malicious code can exfiltrate your data… or worse
  2. Tiller cannot screen or protect you when installing third-party software — its presence in this community is not a security endorsement
  3. Thoroughly review all code before you download
  4. Do not share your personal information on untrusted sites

With that out of the way: this is super cool, @clomok. Thanks for building, documenting, and sharing this solution following many security best practices. Would you consider making the following changes:

  • Pin dependencies to exact versions to reduce exposure to supply-chain attacks via unexpected updates.
  • Commit the lockfile so consumers build the exact dependency graph you tested.
  • Enable Dependabot (or similar) to surface known vulnerabilities in dependencies and keep the project patched.
  • Upgrade the Dockerfile to an active LTS Node version since the current base image is approaching end-of-life for security updates.
  • Pin Docker base images to an exact version following the same supply-chain safety logic as JS dependencies.
  • Add a recommended “audit before running” step to the README (npm audit, pnpm audit, or similar).
5 Likes

@clomok Kyle,

***note I posted this response on your first original post. Reposting here.

I appreciate the work you have done. It looks really useful. I’ve been looking for more visual dashboard functionality within Tiller. I’d love to add this to my template. Right now I’m using Excel, otherwise, I would by trying your solution out. Is there any potential for an Excel version?

As far as a suggestion, or request, I would like to have groups added to the filter(s) and break out. The reason is I have implemented sub-categories by using GROUP as CATEGORY and CATEGORY as sub-categories.

1 Like

100% Agree & Recommend to everyone! - ALWAYS check code before running it

Heck ya I can do all those things once I learn how to. haha. I’ll use your list as reference and see what I can do. Thank you because this helps me a lot in the learning process of industry best practices for maintaining a repo, something that is new to me.

1 Like

Hey Clint, saw your other comment, I accidently double posted. This is the main one.

Your excel sheet should work fine, just export your transactions as a CSV and try it out.

As for groups; I looked into that and really wanted to incorporate it, but the transactions list doesn’t have any group information available to reference.
Since this visualizer is standalone and only knows the information from your transactions list CSV, I cannot add that function without fundamentally changing the security posture of the app.
Unfortunately that is not something I am willing to do. One of the main design constraints for me when building it was no server interaction after the initial page load. I didn’t want any private data leaving your browser, and I built it on an immutable nginx image that cant write any data to the file system, so it couldn’t be changed after its made.

1 Like

Hey @clomok . I love this. I am too lazy to run this myself, so I made it run via Github Actions and hosted the tool on Github pages. Folks can absolutely still download and run the code locally, but for lazy (but still security conscious!) folks, you can either set up the github pages via action on your repo, or just have it available for other folks to fork and “host” themselves. Of course, your call but wanted to put that out there! PR here: Enable deploying app via Github Actions by darinalleman · Pull Request #1 · clomok/finance-visualizer · GitHub

3 Likes

“My First Pull Request” - That should be a badge on GitHub, because I just earned it.
Thanks for the PR experience!!
Haha.

2 Likes

Thanks @clomok Kyle. I did the export to cvs. After a few issues to resolve with extra columns and amount format I got it to work. I does look very good and is very useful. This is the type of dashboard functionality I have been hoping to have built within Tiller’s core template. I also tried out your sample files. That was a nice touch. Great work.

1 Like

Really nice work, @clomok! This was the missing piece to Tiller that I needed - drill down / trends! This along with Period Comparison helps so much.

1 Like