Show HN: Figr.app – a multi-user, notepad style calculator (desktop app) (figr.app)

275 points by jklp ↗ HN
Hi all, just posting an update to my previous Show HN, where I announced a side-project I worked on which was a (web version) of a multi-user, notepad style calculator:

https://news.ycombinator.com/item?id=31817997

After a couple of user requests (and having a good think about it) I decided to migrate the web UI to create a Mac and Windows desktop app. After using it a little bit, I feel this is a much better experience than the webapp, and reduces a lot of the friction if I wanted to run a few small calculations.

You can find the download links below:

https://www.figr.app/download

For context, Figr was a side project I worked on to get back into coding after being in management for the last few years. It's kind of a cross between popular notepad style calculators (like Soulver, Numi, etc), but also has multi-user editing (like Google Docs). I've got some example templates below which hopefully show what it can do, and hopefully is relevant to the community:

- https://www.figr.app/s/RUNWAY - An example to work out your burn rate / runway

- https://www.figr.app/s/LTVCAC - An LTV/CAC calculator

- https://www.figr.app/s/CONTRACTOR - Hourly rate calculator for contractors

Opened to feedback, or technical questions if others are in the process of moving, or thinking about moving their webapps to desktop apps, as it's been quite a journey!

Thanks!

91 comments

[ 90.6 ms ] story [ 678 ms ] thread
How hard would it be to create a Linux version?
Good question, wanted to give it a shot but i only have linux...
I was waiting for this question :)

I think it should be quite straight forward but it's more the deployment and maintenance I'm conscious of.

Mac and Windows (to an extent) both have app stores which can handle hosting, auto-updates, etc, though for Linux I'd have to build a bit of that myself. That also complicates platform specific dev / testing / deployment, and as this is a side project I'm conscious of time.

But if there's demand and things go well, I could be persuaded to release on another platform!

If the primary concern is the lack of a common packaging format/app store, please consider publishing to https://flathub.org/. It should solve these for you across all distributions.

Testing should also be simpler as most of your dependencies will bundled and testing in one distribution should suffice.

Alternatively https://appimage.org/

As a user, I much prefer AppImage – snap/flatpack feel like adding another app store to my system, while AppImage is just download and run.

Thanks for sharing! It looks slick.

Can you address the elephant in the room: why use Figr instead of Excel?

Thanks! I'm not the best designer (my background is dev) though am happy people seem to like it!

Why Excel? I feel there's a gap between a "desktop calculator" (like the default calculator in most OSes) and Excel.

E.g. Desktop calculators I can say, "calculate tax for a single item", but sometimes I need to calculate tax or multiple sums in a list. You can probably break out Excel at this point - though I feel there's a bit of inertia in this. I.e. Thinking of how to structure the sheet, where to put values / formulas / etc.

I feel with a notepad calculator, it's a bit closer to how my brain thinks and I can get simple calcs out quicker. I may be biased too, but I find it easier to read my results the next time I load the sheet in Figr vs Excel.

Btw I'm not saying this is an Excel replacement - there's always going to be a place for that, though I think this is a nice middle ground.

Another thing: although I love excel, excel is slower. The startup is less snappy.
This reminds me of Soulver

https://soulver.app/

> It's kind of a cross between popular notepad style calculators (like Soulver, Numi, etc), but also has multi-user editing (like Google Docs).

From the OP

I wish there were more apps like this which let you just type text and make/do things. Just make everything a sort of real-time coding. It's often much faster to do stuff with text and keyboard than any fancy GUI.

Other examples: sequencediagram.net, SwiftUI and React to some extent, vim directory managers (e.g. some let you rename files just by editing text and delete them just by deleting lines)

The only issue is, I've worked on building these, and it's a lot harder than it looks. You can either do immediate mode, which requires fast parsing and rendering and supporting all sorts of illegal values; or you can try to do retained mode, but there are insane #s of edge cases and the effort to compute diff usually makes it slower anyways. Furthermore if you want a really fancy text view, you need to build it yourself, which is a huge project on its own.

Agree about the "just type in text" paradigm though I feel they suffer from the "empty state" problem. You can see I tried to mitigate with the "blank sheet" placeholder text, and on web there're templates available. Unfortunately it appears only a fraction of users use the templates, and of course users never read the placeholder text!

I haven't heard of immediate / retained mode before - interesting concept! Figr is more straight forward and evaluates a line as "0" if there's an error (the opposite of "be conservative in what you send, be liberal in what you accept"!) so they are problems where entire calculations are "wiped out" if there's an error on a line, but I think that's the trade of to having accurate results.

As for a custom text view completely agree! I did do that initially though switched over to draftjs later and (despite it's lack of good guides) has been a huge time saver!

How about using something like NaN instead of 0? To not have a small set of calculations being all 0 and missing from a larger end result (which would go to NaN instead).
The hard thing about plain-text is that you quickly run into domains/problems that are too complicated to easily represent as plain-text. When that happens, you run into problems: the text representation becomes really verbose (e.g. XML) or exhaustingly terse/unergonomic (e.g. LaTeX, IMO), and you can only build anemic tooling.
Oh yeah completely agree. I've been working (on and off) on some designs embedding other non-text items into the sheet e.g. tables, graphs, etc. Still in the early phases but the difficulty is balancing the complexity / simplicity.
one solution to this is to make an editor which is almost text but has snippets like inline images, controls, and fancy decorations. e.g. Racket snips, JetBrains MPS

another which is more of a workaround is to make the preview editable. So when the text is hard to understand or manipulate you just edit the preview, and when it’s easier you just input text. i believe this is what SwiftUI does and what people have tried with HTML and React.

of course both of these are exponentially hard. The former means you have to write your own editor and the UI for the widgets and think about a lot of problems (text wrapping? cursor movement?) The latter means you have to write a UI on freely-editable content which is really challenging and then have it sync with the text which also brings up a lot of problems (AST formatting? How fast to update?)

In fact I haven’t yet seen a single good example of either type of editor, maybe SwiftUI is good although i haven’t used it. Many existing ones are buggy with ugly unintuitive GUIs or produce bloated AST

I had been looking for such an application, but than I decided to build one myself that suffice my needs, here is the repo https://github.com/4silvertooth/QwikTape
Nice, I created my own: https://numbr.dev
"Figr", "Numbr"...

I'm starting to think you guys don't like vowels at the end of your words.

Next up: Calculatr

Nah they're just heavily inspired by the Welsh :p
> starting to think you guys don't like vowels at the end of your words

Naming reminds me of the mid to late 2000's.

Flickr, created in 2004.

Tumblr, created in 2007.

Well, top of my mind, there’s Numi and Soulver which are quite similar. There’s lot of such apps I have the impression.
Is it available for download somewhere other than the OS "app stores"?
Ahh yeah not at the moment. I intentionally only released on app stores as I didn't want to complicate my deployment, as well as host binaries / handle auto-updates. Signing is also a real pain and (in the case of Windows) quite expensive, and I'm unsure of the demand at the moment to warrant that.

Just out of curiosity, what's the aversion to app stores? I know for paid apps there's a large commission to Apple / Microsoft (I try to download direct when I can) though for free apps I'm a bit more forgiving.

Privacy mainly. And as a software developer, such app stores are insulting to us because it is used to extort money from us for the "privilege" of developing software for their platform, when they should be the one appreciative of the fact that every new software from us increases the value of their platform. As a user too, I find this very unethical of them as it unnecessarily increases the cost of buying softwares (why should I pay Apple or Microsoft or Google an extra 20 to 50% for buying a software made by you?). I have no qualms in saying that we software developers are fools for letting them take advantage of us and our clients / users.
This is great, I love local-first [1] software.

Are you using OT or CRDTs for real-time editing?

Are you using any specific cross-desktop platform? (Electron?)

[1] https://www.inkandswitch.com/local-first/

> This is great, I love local-first [1] software.

Thanks! This was an intentional design decision on the desktop too so I'm glad someone noticed!

> Are you using OT or CRDTs for real-time editing?

You know this is embarrassing - it's the first time I've heard of those terms and from a quick google I really needed this a few months ago! A lot of the problems described I actually had to battle with and if you try hard enough, you can get the calcs to break state between the users.

I'll definitely dive deeper into this, thanks!

> Are you using any specific cross-desktop platform? (Electron?)

Yeah sure - the app was initially written in React.js for web, and I just did a few modifications to get it deployed via Electron. Tbh the migration was quite straight forward (there were a few design tweaks and UI elements I had to make) but surprisingly the most difficult part was creating the binaries and submitting them to the app stores!

There was also some issue with CORS (due to Electron using local .html file) but managed to find some code to rewrite the headers which fixed it!

for CRDT solution, check tiptap + hocuspocus / yjs
Thanks will do!
Interesting idea and I like it. However, I just tried it and found it does not support Chinese. Would you like to add it as a new feature?
Ah yeah I've had requests to support other characters though unfortunately quite a few of the calculations are passed through to mathjs, which has trouble supporting non latin characters.

It's on the list though but unfortunately due to how integral mathjs is to the app it might not be an easy change to make!

This seems to be a shadow of Calca.

https://calca.io

I would be very happy if it was, calca stopped being developed probably 5 or 6 years ago.
I love apps like this. I currently use Numi daily for running financial-related tracking and scenarios. It has a few annoying UI quirks, so I'm super open for alternatives (especially with cloud syncing).

I played around with porting my Numi sheets over, and the only thing that's tripped me up so far is using underscores as numerical separators, eg: 1_000_000 for 1000000. All my Numi values are written this way, so that's my only feature request. I guess I could just use commas in this context.

Great work!

Edit: And dark mode :)

I love Numi - it's a very beautifully designed app! Didn't realise you could use underscores as separators, will make sure to add it in!
Hi! For science, you should allow showing output for small calculations. (Think of the order of e-34, like the Planck's constant.)

Thanks for the work! Waiting for a Linux version :) (Flathub autoupdates, if you were thinking of appimages)

Ooh. I have used Soulver on iOS for nearly a decade now. Sadly, the developer has pulled it from the App Store for a long time, so I can’t point others to it. For me, Soulver has the ideal UI for a phone screen. The one thing I really feel it is missing is a cross-platform sync. I used the iCloud integration and Mac app, but if I could access my worksheets from Linux and Windows just as easily I would be totally happy.

Figr, ignoring the lack of mobile apps, doesn’t really scratch this itch either though, as I want to self host my sync.

Thinking about this a bit more, if I wanted to scratch my own itch… there’s a nice VS Code plug-in called Qalc [1] which I could probably build an iOS interface around and use Syncthing/Möbius Sync…

  1: https://github.com/nortakales/vs-code-qalc
Have you tried Calca? https://calca.io/

It works really great on mobile too (even their website is not updated it works fine on latest OSs).

What language did you use to build this? What about the UI? Also, I tried to login to the application with Google and got "Authorization Error -- Error 403: access_denied -- The developer hasn’t given you access to this app. It’s currently being tested and it hasn’t been verified by Google. If you think you should have access, contact the developer"
Looks interesting, what makes this different from using a Google Sheet ?
I use Python program for that It works pretty fine

Example

  $ python
  >>> weeklyprice=4000
  >>> dailyprice=weeklyprice/7
  >>> februaryprice=dailyprice\*28
  >>> februaryprice
  15988
(comment deleted)
years ago, I did something OP did, with embedding python, and whole page have tree type hierarchy with parent can access child pages and child have read only access to parent values. python is awesome.
A Jupyter notebook would work in much the same way, and has the advantage of being able to mingle Markdown in with the code.

Neither is as approachable for a non-programmer as the OP, however.

https://observablehq.com/ is another option, similar to jupyter but perhaps more approachable for people who like JavaScript over Python.

I'm still looking for the perfect text-based solution.

Looks great!

If you are looking for an iOS/iPadOS app my own Kalkyl 3 includes support for shared documents with real-time collaboration.

You don’t input text (but there’s of course keyboard support), instead you input tokens so that e.g sin is one token just like the digits. WYSIWYG editing with raised exponents, root-overbars. Arbitrarily complex unit conversions (e.g USD/ft^2 to EUR/m^2 is a single conversion) and dimensional analysis.

The app is free, but the document features are for pay (with a free trial):

https://apps.apple.com/se/app/kalkyl/id519933025?l=en

It looks great. So far I have been using Numi and I can see a few advantages and disadvantages in both apps.

Numi:

+ lightweight

+ very fast start

- tabs are a paid feature

Figr:

+ variables

+ tabs

- slow start compared to Numi

- cannot customize the icon bar

What both apps dont have and what I am looking for: A super lightweight excel-like tables app to do basic calculations with formulas behind the cells. Do you know anything like that, guys?