Initializing Operations | Math Software MVP App (2024/02/01)

The Math Software MVP and its web app received two PRs providing project initialization and implementing newer standard drafts outlining the MVP structure. Other structural aspects were considered from the experience I had working with Repsymo.


First, I recently published Initializing the New Math Software MVP App (2024/01/30) as an update on what’s happening with the Math.Software MVP app.


The first PR[1] initialized most of the project applying the MVP structure from the draft mentioned.

I created the math.software---mvp app with React 18, TypeScript 5 with SWC, and Vite 5.

I fixed the standard to ES2022 for all the project configurations, tuned the TS config for strict checking, and took a lot of time to configure the ESLint for checking TS, React with Hooks, and fixing some legacy issues of the tool.

I also installed bootstrap-react and bootstrap to continue a similar style approach I’ve managed in Repsymo.

Moreover, I installed the better-react-mathjax library to keep formatting equations in React, with a great integration compared to the JS mess of options with abandoned or poor support. I set the ASCII Math support and removed huge bloat from the LaTeX formulas.

Web configurations are always an off-topic mess that takes a lot of time to make them work because of the dynamic and poorly designed nature of web tech like JS. You can configure something, but it’s uncertain if it’ll actually be so or have arbitrary side effects.

One of the legacy issues mentioned before was the “JSX uses React” lint error when it’s unnecessary to import React for JSX now (React 18), but the tool still gives the error.

There was another third-party issue where I had to prevent the lint for a line of the vite.config.ts file because there was no way to fix TS7016: Could not find a declaration file for module vite-plugin-eslint., despite the presence of types in the vite-plugin-eslint library.

So, the types are there (in the node_modules lib), but they can’t be found 🤦🏻‍♂️. I could fix that, but I won’t lose more time with web dev nonsense errors, and that’s development code anyway. That’s why I suppressed the lint for that line of code.

One last pending detail is to migrate the legacy .eslintrc.cjs format to eslint.config.js since it’s being dropped. I don’t have a priority for this, and documentation can be better later. So, I’ll wait and migrate this minor ops detail in a future opportunity.

Web dev is uncertain even with TS, unlike other platforms like Java where, for example, you CTRL+Q and have quality documentation (the tech gives certain guarantees). In web dev, only a mess with build tools and runtime surprises are guaranteed.

Hence, we can’t use random standards and tools like web dev to reach the engineering grade, and frequently, GUI/high-level apps can only make it to production as an MVP. GUI or high-level apps can have the engineering grade, but that wouldn’t be feasible unless you’re deploying them to space or something like that.

The web app configuration performed will allow the stable development of upcoming pre-release versions.


Finally, the initial source code structure was defined in the second PR[2] with the following paths of the src directory:

  • sys: TS functionalities.
  • math: Mathematical code (in-house/fast prototypes).
  • ui: Standalone React components.
  • app: Web app integration.

Notice they’re in abstraction order (from sys to app). The abstraction order is key for engineering anything (and avoiding cycles I mention so much).

When these paths get upgraded, for instance, math is rewritten in Purescript, they’ll be published as standalone libraries instead of belonging to the app modular monolith. They’ll still be MVPs but moving toward the demanding engineering grade.


Abstraction order is mandatory for coherent designs. I also clarified why MVPs and the engineering grade are both essential to succeed in software engineering.

My experience in Repsymo and newer standards allowed me to create the MVP of the mathsoftware organization with operations initialized, so the next development will go straight to the initial development for releasing v0.1.0.

References

[1] Initialize MVP ops by tobiasbriones · Pull Request #2 · mathsoftware/mathsoftware—mvp. GitHub.

[2] Initialize project structure by tobiasbriones · Pull Request #3 · mathsoftware/mathsoftware—mvp. GitHub.