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

figr.app

275 points by jklp 16 days ago

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!

armchairhacker 16 days ago

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.

  • jklp 16 days ago

    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!

    • avdlinde 16 days ago

      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).

  • 4silvertooth 16 days ago

    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

    • medv 15 days ago

      Nice, I created my own: https://numbr.dev

      • lake_vincent 15 days ago

        "Figr", "Numbr"...

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

        Next up: Calculatr

        • codetrotter 15 days ago

          > 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.

        • danielvaughn 15 days ago

          Nah they're just heavily inspired by the Welsh :p

  • feifan 16 days ago

    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.

    • armchairhacker 16 days ago

      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

    • jklp 16 days ago

      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.

  • illiac786 15 days ago

    Well, top of my mind, there’s Numi and Soulver which are quite similar. There’s lot of such apps I have the impression.

easygenes 16 days ago

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.

  • easygenes 16 days ago

    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
  • lardissone 14 days ago

    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).

bombtrack 16 days 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 :)

  • jklp 16 days ago

    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!

gurupanguji 16 days ago

This reminds me of Soulver

https://soulver.app/

  • kalenpw 16 days ago

    > 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

vinaypai 15 days ago

Congrats on building and launching your app.

However, in my opinion, you need different examples to show the strengths of this app. A lot of the examples on your page look kinda clunky and error-prone to me, and better solved with a spreadsheet.

Take the "personal finance" one. The "total expenses" row lists out all the expenses adding them out one at a time. In a spreadsheet you'd just type =sum(A1:A5). Imagine it wasn't just 5 but 20 items. Now your sum gets pretty unweildy. How confident can you be from looking at that sum that you haven't missed one of the expense items? In a spreadsheet you know pretty clearly that =sum(A1:A20) has all those rows. Better still, if you insert a row to add another item, it'll update the sum for you.

The "Investment returns" sheet is another example. What if I wanted to extend that to 30 years? In a spreadsheet I'd just copy the last row and past it in the the next 10 cells and I'm done. Here's I have to paste it 10 times, and then manually update each row and hope I didn't make a typo anywhere. What if I didn't want my savings to be constant but assume that I'm going to increase savings a year over time?

The unit conversion is somewhat neat though, so maybe examples that use that a bit more?

  • jklp 15 days ago

    Thanks great feedback and completely agree about the clunkiness around sums!

    As a mitigation I did add row highlighting (if you hover over a var it'll highlight the row it was defined at), but the underlying problem of dynamic sums is still there.

    I was working on a TOTAL() function (which someone also mentioned in this thread), but conceptually I also think some of the calcs are better in a tabular format, so have been toying around with designs with tables etc.

wellpast 16 days ago

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/

  • jklp 16 days ago

    > 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!

    • wahnfrieden 16 days ago

      for CRDT solution, check tiptap + hocuspocus / yjs

      • jklp 16 days ago

        Thanks will do!

fatih-erikli 15 days ago

I use Python program for that It works pretty fine

Example

  $ python
  >>> weeklyprice=4000
  >>> dailyprice=weeklyprice/7
  >>> februaryprice=dailyprice\*28
  >>> februaryprice
  15988
  • larrywright 15 days ago

    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.

    • 20after4 15 days ago

      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.

  • iamgopal 15 days ago

    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.

geesejuggler 15 days ago

Cool! Looks promising!

Some UI/UX remarks...

- I would expect to find the 'new sheet' option near the sheet list (on top or on the bottom perhaps?).

- Creating a new sheet does not give an empty sheet (instead it presents the same info as in the preloaded example).

- How do you deal with different notations for numbers? Can I switch somewhere from #,###.## to #.###,##?

- Operators and currency is now displayed in gray, just like the comments. This hurts legibility more than it helps focus.

- When you can detect unit indicators, maybe allow users to click on them to change the unit to another (compatible variant). For example change kilometers to yards.

- Header and sub-header styles are quite similar, makes them hard to discern.

  • geesejuggler 15 days ago

    - When editing the sheet name in the left panel, I could drag the sheet's location into it's text field.

    - Would it be possible to edit the sheet title when clicking on the title itself (in the right panel)? Maybe show a pencil indicating this possibility.

    - Local time format is not reflected in the sheet's modification time. What will happen if I share the sheet, will it reflect the latest modification time for all users or my latest modification / view? What I am trying to say is: is there a way for me to see if there are changes I have not seen?

    - A little bit of hierarchy or tagging might help those with lots of sheets in the future.

    - Exporting and printing options? :)

    • jklp 15 days ago

      These are great suggestions! Some of them are on the road map but lots of good additions too.

      > What I am trying to say is: is there a way for me to see if there are changes I have not seen

      Currently I have a red "dot" on the cloud icon in the navbar when it's lost server sync - but there are certain cases where it doesn't show. I do need to spend more time on the multi-user aspect, though it's quite a large piece of work and unfortunately not a lot of users seem to use it.

      I also think a hierarchy / folder structure would be super useful. Using it regularly I have an unwieldy large number of sheets and it's difficult to find older ones / search!

awb 16 days ago

Thanks for sharing! It looks slick.

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

  • jklp 16 days ago

    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.

    • for_i_in_range 16 days ago

      Another thing: although I love excel, excel is slower. The startup is less snappy.

  • IndigoIncognito 16 days ago

    Ease of use + A nice UI + A dedicated application

ksec 15 days ago

There is a few things I wanted but mostly missing in these type of calculators. More Units.

K for Thousands, M for Million, B for Billion and T for Trillion.

Some Calculators either dont offer these, or they do but with different Letters representation because M, B and T are used for something else. IMO this seems backwards because those are the most common unit in analysis.

Other Units including PB for Petabytes, TB. GB, MB, KB, as well as Mbps to Gbps unit conversion. us, ms, ns, for Latency calculation.

Getting Market Cap, P/E data etc from Yahoo Finance.

  • jklp 15 days ago

    Ahh you have no idea how much trouble I have with unit clashes, not to mention stock price / currencies (btw stocks aren't in at the moment).

    It's on the roadmap though and good to see others have the same idea!

    • ksec 14 days ago

      Worth mentioning is Stock / prices with Date or Current.

      For example I want to do a comparison between certain period of time, so Market Cap are specific to those Date.

      In another example I want to keep an eye on Big Tech's current market Cap, and the list would update every day. Giving me an overview of current situation.

russianGuy83829 16 days ago

How hard would it be to create a Linux version?

  • jklp 16 days ago

    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!

    • tuxychandru 16 days ago

      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.

      • unhammer 15 days ago

        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.

  • jonas-w 16 days ago

    Good question, wanted to give it a shot but i only have linux...

twarge 16 days ago

This seems to be a shadow of Calca.

https://calca.io

  • etchasketch 15 days ago

    I would be very happy if it was, calca stopped being developed probably 5 or 6 years ago.

nordicio 15 days ago

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

SimplGy 11 days ago

Respectfully, might need to rename it if you’re going for broad adoption.

Just imagine speaking the name of your product to a family member who asks what you’re working on, or the cashier at the grocery store asks what your startup is.

I know you don’t know me and it’s none of my business. I just thought better to rebrand sooner than later. Maybe ask someone you trust wrt marketing kinds of questions?

KierPrev 16 days ago

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)

webmobdev 16 days ago

Is it available for download somewhere other than the OS "app stores"?

  • jklp 16 days ago

    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.

    • webmobdev 16 days ago

      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.

ernestipark 15 days ago

I've wanted to build something like this for a long time because I tend to use normal notes for a lot of basic calculations (e.g. personal finances, budgeting, etc) that don't require a spreadsheet, so this is really cool. But I probably wouldn't use this because there's a lot of intertia to just continue using my existing notes apps (Mac Notes mostly) because of the ease of syncing and integration into rest of the ecosystem. I wish this could be just a plugin to stuff I already have so its not another app I have to use.

fulafel 16 days ago

Click saver: Windows & Mac only

gman83 16 days ago

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"

88840-8855 15 days ago

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?

pgt 15 days ago

Good job! I spent a while working on a more flexible & real-time version of Frink. Needs to exist.

https://frinklang.org/

derekhsu 16 days ago

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?

  • jklp 16 days ago

    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!

sc970 15 days ago

Seems like by default every new sheet I create it shares with 3 people from @figr.app and I am unable to remove them.

sc970 15 days ago

Nice!! Loving it so far, would be nice to hide the side sheets pane and also allow multiple instances!

metadat 15 days ago

Is there a mobile version in the plan? It'd be cool to have a notepad style TI-89 on steroids.

Dave3of5 15 days ago

Looks interesting, what makes this different from using a Google Sheet ?

craig 15 days ago

Looks really neat. Anyone know of a similar neovim/vim plugin?

felipelalli 15 days ago

ASK HN: Is there a similar mode to Emacs? I didn't find it.

davidork 15 days ago

so, speedcrunch, but on the web. got it.

lovetocode 15 days ago

this is super cool good work!

MikeYasnev007 16 days ago

Hopefully I am not counter or calculator)