If you need a calculator, with ability to do symbolic maths, bigints, plotting and support for units, there is no need to build on from scratch… Maxima is free, long-established, and can be run via Jupyter (see for a fixed-up dockererised version, try out on BinderHub note may take some time to start for first time while binderhub rebuilds the container). Or you can try it with maxima in your browser using WASM: https://maxima-on-wasm.pages.dev/

It supports units using the bult-in ezunits module:

load ("ezunits")$
load ("physical_constants")$

For example:

1`kg + 1`g;

is by default printed in its original symbolic form:

\[\mathrm{kg}+1\;\mathrm{g}\]

But can be converted to grams using:

% `` g;

\(1001\;\mathrm{g}\)

Or to kilograms:

% `` kg, numer;
\[1.001\;\mathrm{kg}\]

There are built-in physics constsants too:

%c;
\[c\]

The numerical value can be seen with:

constvalue(%c) ;
\[299792458\;\frac{\mathrm{m}}{\mathrm{s}}\]

Or in different units:

constvalue(%c) `` cm / s , numer;
\[2.99792458 \times 10^{+10}\;\frac{\mathrm{cm}}{\mathrm{s}}\]

All the formating shown here is built-in but sometimes it needs a bit of fixing up:

100000` Pa `` psi, numer;

gives the greek letter not, pounds-square-inch:

\[14.50377377302092\;\psi\]

You can try out all this and all the other Maxima features on BinderHub .