Quick micro web app build for debt payment and self retrospective

Jacob David C. Cunningham
9 min readJul 16, 2022

--

What is it?

A basic debt payment priority web app.

GitHub Repo

Reminiscing

Story time… about 7+ years ago I was crazy. Crazy enthusiastic that is. I had all kinds of ideas and I made them (tried to). Look at this web interface, it doesn’t even make sense, who would use this? But my graphics designer friend still made it for me.

This was created sometime in 2014–2015. lmao random bridge rectifier diagram. I had this obsession with the name Normalbus so that’s what the Nb is from. I had a dream about it but it again doesn’t make sense.

That was a general trend in my ideas is they didn’t make sense and nobody wanted them hence no money.

Here’s another one, I was like “what if an institution validated your credentials manually?” As opposed to what LinkedIn has where you can just put in whatever you want. The gimmick was this leaf.

Finfinite

Now the topic of this post.

Look at how insane this was. Why were there so many different designs, this is all part of the same app. I got into Touchdevelop since I wanted to make a mobile app. I was using a Windows Phone Lumia 920 near this time/prior.

This is an example of not getting external validation before sinking copious amounts of time into a project that amounts to nothing. I remember being at a party/beer pong table, shoving this app in someone’s face like “look at this app man” and he’s like “get that out of my face, I’m trying to party”.

It was cool that I figured out how to make the calendar above based on some given info like the integer for today/days in a week and then I would work backwards to populate previous days. Also the numbers on the sides are the bills for this week that are due which is pretty cool. Although nowadays I just pay all my bills at the first of the month.

I developed this on this Microsoft platform called Touchdevelop. I spent about 6 months or so messing around with that platform and I don’t know if I would say that it was a waste of time. Around that time 2012 and earlier I was not into computers. I was flying rc planes and in my phys-eng co-op degree program I had to take C++ which I just did the minimum to get a B+ in it. We worked on basic CLI stuff eg. hangman. Same in 2014 when I tried to change my direction to computer science, I took a Java 101 class that I did really badly in got like a C-. Programming didn’t click for me yet at that time. Then as my financial life was imploding/living in this fraternity house (thanks to them, my rent was super cheap eg. $250/mo) I was able to drop months and months of time just learning about web development while not having a job. How to make an SSL, how to do forms ($POST) and how to display/pull stuff from a DB, etc… LAMP stack baby and jQuery.

I was tinkering on this idea since 2013. This design preceded the work above since I was just getting started with basic forms/web development at this point.

I remember sitting down with a pad of paper trying to figure out the “mathematical equation” that explained how this app works. It turned out to be something like an inverse square function eg. 1/x² or really “pay the most towards the most important loans” or avalanche debt payoff method as it is already known as. It also turned out that inverse square is too much (the numbers after 3, 4, 5+ are too small/below min payment).

Back then I could barely make anything. I could barely align things or make a site that was secure. Dumb script execution on input (XSS) you got me. Got my app deployed on a shared GoDaddy server using cPanel ooh buddy… now it’s like you’ve got this Node microservice, caching layer in memory + redis, thing’s in a container, in a cubektl orchestration environment, using domain driven design, separated write and read CQRS, event queue and messaging… it’s crazy. Get that stuff on a pipeline, static analysis on code… the thing is, now that I can make a lot of things… I don’t have the ambition as I used to. Back then almost all of my ideas were stupid. But I had the ambition to try and throw things at the wall to see what would stick (none). You can say that’s a waste of time, but it was the creativity/trying. A salary job caps you but entrepreneurship you can make more/be free (faster). I really bought into that dream of SV/The Social Network back then. The framing mindset I had back then was “I’m failing out of school, how will I pay $30K of student loans? I need to manifest a miracle”. Which did not happen, it was just lucky that I had friends who helped me (2016 crash on their couch) as I studied more/freelanced/worked in factories/restaurants until I got my break (first full time web dev job 2018).

Anyway right now I’m a technical laborer (I build things for other people), I tried to work at a startup that didn’t succeed so I’m back to salary. I’m super broke at this time so I’m grateful to have the stability and opportunity to learn more because the web has so much depth to it. I’ve never really designed reliable systems so I will learn and build a lot at my new role.

Snap back to reality

Features

  • add debts
  • second-by-second debt growth incrementer (not implemented)
  • localStorage for data store

I’m just going to make this app real quick. It’s not going to be pretty and it’s all going to be web, localStorage based no auth.

This app is not going to be pretty, it just needs to work/do its job where it allocates my excess money after bills to pay down debts. In order of the ones that grow the most per day. For example my car loan grows by $5 per day.

One of the features I thought about is the sorting by largest or happiness (smiley) due to paying off small stuff/getting rid of them. I did have thoughts about charting that shows overlap in debt growth/worse (upper layer) but probably won’t do that now.

Another feature I want that helps me “remember” and drives me is an incrementor, it’s basic just poll/add to the displayed balance per second. It’s silly but tells me “focus, get your shit together, pay this down”.

This web app is just going to be a non-SPA, deployed on GitHub Pages.

Ahh the blank canvas

Development

So I’ll have the main + icon. Click that shows a form to enter data. Data is saved into localStorage (has persistence and no need to deal with DB).

Ehh this interface design is trash but I want to get this done quickly since I have other bigger things I need to do this weekend.

I’m going for extremely simple. Write, sort, display.

12:02 PM making progress

Again super ugly/simple, get it done, it’s primarily a tool for me. I didn’t even add type validation other than making sure it’s not empty.

Started around 10 or 11 AM can’t remember, spent time looking for the old Finfinite images to make the screenshot collage above.

12:35 PM working on debt add logic and display

1:30 PM starting to add data to perform some logic on it, added card remove

Can see my debts below, account names omitted. One of the ways I raised my credit score from 300’s in the past was to get as many credit cards as I could to increase my credit line. I did eventually hit the 750’s. Another big thing is dealing with the negative things on your credit report like debt bought by junk debt collectors (settle/fight). The largest balances on here are loans.

About $47K debt

These are manually entered, I could put in Google Spreadsheet support since that’s where this data is populated/source of truth but won’t do it now.

My student loans aren’t in here because they’re on hold right now (no payment required). But I will pay those off too I don’t want them to be forgiven. Yeah I’m definitely far from my FIRE goals lol.

I have not applied the math yet/ticker that will move the numbers in real time. Side note, there was this super addictive clicker game called Paperclips. I get that vibe when I see data changing in real time.

One of the reasons it’s taking me a bit to pay down my debts is I help out my family/donate to different orgs so that takes away like 25% of my income. Which I just tell myself “make more money”. But I’ve been sued before by JDC’s when I defaulted on my past accounts and I’m not trying to repeat that. Debt is also not a bad thing, I mean credit lines/loans because that is padding around your net worth/potential ability.

1:58 PM fighting myself right now due to a bad decision that’s propagating downwards in the code (makes the code much slower, more processes). Specifically using array of array of objects. Like why…

2:19 PM here it is sorted, this code is so bad, there’s duplicated nested for loops means high quadratic something big O.

Now need to work out the payment distributed based on min pay if set (not right now) and focusing on first entries.

So if I were to do this real-time pulse thing, it’ll be nasty to re-render these cards every time. So I’ll just build a secondary object that is used to update the cards by the every-second pulse.

Ehh it’s not worth it, the pulse thing, these values are so small you wouldn’t really see a difference every second or 5 seconds, try dividing $1.22 by 86400 what does that get you… lol.

2:47 PM I’m losing steam already, unfortunately I wasted my fresh brain finding those old Finfinite app screenshots. So I’ll just add that payment thing that trickles down into each card. I’ll set a minimum cap of idk… $50 to be meaningful.

payment distribution with min pay correction

See in this case, there are 12 debts, debt #1 gets the highest payment. If the minimums aren’t met based on the 1 / (d ^ 2) distribution, the minimums are used. Then subtracted from the total (1000).

The thing is… you could have a true inverse square graph or a modified inverse square like this:

This means 3 out of 12 say, would get equal but highest payments while the rest follow the inverse square pattern.

Oh yeah I should be using the monthly growth value as a minimum to pay along with the $50 specified.

3:10 PM man I’m spent already, gotta finish this.

Ugh… I can do this but I’m too spent now, where the “filling” is recursive and insures there is the min 50 per col and re-distributes the remainder to fill every col. So I’ll just go over/replace the ones under 50 with 50. Yeah it goes over but that’s alright, easy to adjust by changing number.

3:40 PM Alright I’m done, it’s usable for me. So it was like a 5–6 hr project.

This was a lazy and poorly thought of project BUT it works and it’s just for me.

Takeaway (if any)

Life is crazy. There is opportunity out there. Just gotta try (and possibly get lucky). I’ll keep learning/building, I can’t help it, it’s like an itch. Sometimes it’s nice to look back but can’t get stuck in the past too. Back then I was chasing this fantasy (make some web app get super rich somehow). Luckily even though I did not succeed, during the process I learned some marketable skills that worked in my favor later on.

I say try for example before I had a car, I had to ride my bike 30 miles everyday to my first fulltime web dev job and I’m not an avid cycler. That sucked, that was 3 hours of my life per day wasted on a cheap Walmart bicycle. I was able to read some books (Audible) and listen to podcasts though. Of course I usually was only able to do 4/5 days and then I would be lazy/Uber and lose I think $100+ per day can’t remember.

Throwback, this was in 2018, taken by my home security pi project, been running for 5years now seems, crazy! That hairline RIP

Here’s another throwback, I found this while searching for the Finfinite screenshots. I was trying to do this web tutorial C in 24 hours all at once lol. I think I made it to hour 16 or 18 but didn’t finish it, hence all the Red Bulls. I time lapsed it.

2013 crappy Walmart laptop

--

--

Jacob David C. Cunningham
Jacob David C. Cunningham

Written by Jacob David C. Cunningham

Software developer and general technology tinkerer

No responses yet