OFFLFIRSOCH 2026 plans

`spend` is my planned entry for OFFLFIRSOCH 2026. It will be a program that may help me direct my purchases towards more local, sustainable and economical choices.

OFFLFIRSOCH 2026

In the initial version it is about saving data about my purchases in a way that allows analytical queries against it.

It is a program supporting behaviour change. My hypothesis is that when I have data, I can find the ways to change my purchasing habits where they matter, without getting tangled with tiny and meaningless dabbling. (Someone could point out that writing this program is meaningless dabbling but this is hobby project motivated by curiosity, so it does not count.)

What `spend` is NOT:

- accounting

- budgeting

- dashboard or data visualisation

- habit tracking

Offline-first challenge: My bank provides a semi-automatic spending tracker in their mobile app and website, and in a way `spend` is going to be an offline replacement for that. But the bank service works at transaction level, for example if I buy groceries, new headphones and a book from the same store at one visit, they are all lumped together. Store and receit level is not suitable for the questions I'm going to ask from my data. There are probably a ton of web services for similar things, but I did not look at them yet because I want to figure this out on my own instead of guiding my thinking towards someone else’s implementation.

Much of the inspiration for this came from

https://drmollytov.smol.pub/ungovernable
gemini://drmollytov.smol.pub/2026-02-23

End-to-end example

Here is a concrete but extreme example of the type of change `spend` could support: I notice from my data that I spend much in ready-made meals I buy from a big multinational grocery store chain. The obvious opportunity for behaviour change is to start cooking more meals at home. Since the hypothetical I of this example is not good at cooking, here is an opportunity to learn a new skill.

Months pass, I learn to make my own meals and I manage to make the habit stick (that's the difficult part of any change and `spend` does not help in that). I examine the data and I notice I'm spending less in ready-made meals and more on ingredients (and spending less in general), which is good for my money and healthier too. But the data shows I still pour most of my food purchase money in the multinational chain. That is an opportunity to become more local with my food spending, and try to find a national store chain, or a locally owned store, or even a farmers' market or other direct supply option. Getting to first-name basis and knowing who grows my tomatoes.

More months pass, and I notice from `spend` data that my food ingredient spending has moved towards co-ops and local farmers. The data shows I buy lots of herbs and vegetables from them, so there is again an opportunity for increasing my indepence from outside sources, and maybe have some fun at it. I decide to learn a new skill and start growing some of my food in my garden, balcony or having herb pots in the kitchen.

In this example, I have changed my behaviour from consuming ready-made meals bought from a multinational chain to cooking myself and growing some of the ingredients myself and buying some of them from my local community. I have decreased my dependence of corporations, eat healthier, have learned two skills and possibly improved my life on other ways too. The purpose of `spend` at this initial phase is to experiment with myself and see if showing myself hard data will make behaviour change towards better choices easier.

Example queries to support

- In what kinds of product or service categories am I spending? Like food, living, a hobby, media consuming, home repairs.

- In what kinds stores and in what specific stores am I spending? Like global online stores, chain stores, local services, international media providers, my next-door shop?

- In whose products am I spending? Like Apple, a specific dairy product producer, a specific book publisher?

- Closely related to both above: How local are those stores and products and producers? Apple is from the US, the dairy product producer could be from my country, directly from a farmer is very local.

- How much am I spending in things I would get free? Like books that would soon be available in the library, or licences for commercial software when free (as in freedom) alternatives exist.

- How much am I spending on services I could learn to do myself?

- How much am I spending on products I could make myself?

Chasing locality

How close can you come to knowing the first name of the person who grows your tomatoes, sews your clothes, or makes your soap? Total self-sufficiency isn't the goal here; personal, local interdependency is. You may not be able to reach 100% first name basis, but see how much closer you can get.

https://drmollytov.smol.pub/ungovernable

This is the reason I’m writing this program.

That said, the locality and tracing the chain to the source is not something I’ll be investigating for most things. When I notice I’m spending much in a store or in a product, the data should show me that here it would make sense to look deeper and find out where my money goes and who actually makes the product or provides the service, or holds the final link in the ownership chain. For obvious things like Apple or next-door grocery store I know the **apparent** locality immediately, so I would initially record that for the store/product/producer and investigate deeper when it makes sense.

In the online world things get murkier. For example, does my “local” online service store my data in a US cloud provider servers?

Data entry UI

`spend` is only the data entry user interface, at least initially.

The data entry should be as convenient as tabbing my way through the cells in a spreadsheet. Otherwise recording the data will not stick as a habit.

I assume that the most challenging part is going to be designing the user interface in a way that

- Is frictionless enough that I will keep using it regularly for a long time.

- Supports connecting dimensions (store, product, producer) with the fact (individual item purchase) reasonably reliably, without me having to remember database identifiers or be too precise with identifying products, stores or producers.

Graphical user interface would possibly make it easier to choose products, stores and producers quickly from a list, but I haven't written a desktop GUI after Java Swing years ago, and I'm not going to make this a browser-based application, even a local one. Text user interface (TUI) could be an option, but that would require `curses` or a similar library. Learning a new library, designing an UI based on it, and writing an application with it would probably be too much for one month. So I try to stick to a command-line interface, either a git-like style in which all entries start from the shell invoking something like `spend add milk 1.99 kwik-e-mart`, or starting the program once and having internal commands inside its own CLI.

Technologies

I try to keep the dependencies minimal, preferably have none beyond programming language and its built-in libraries. For a prototype like this I'll go with Python. It has built-in support for SQLite and readline (and curses), so it looks like my program is not going to need any external libraries as run-time dependencies. I might add some dev-dependencies like pytest but that should not affect running the program.

In the spirit of offline-first, I try to arrange my development environment so that I can do most of my development work offline. That should not require much more than downloading the SQLite docs locally and getting into the mindset that I would first look for an answer in my library.

--

About me

pv@smolpub.mail.kapsi.fi