How my weekend project turned into a 3 years journey

June 22, 2024

endless road
Hello everyone! My name is Anthony 👋

I'm creating an app that started as a simple note-taking tool but has now grown into a full-fledged project way beyond what I could have imagined. Let me tell you how what began as a weekend project ended up taking over my life without me realizing it!

Spoiler alert: It wasn’t a piece of cake! 🍰

Background

comic strip: I will create a simple note app

The idea for my project was born out of a need as basic as a black coffee ☕️ on a Monday morning: I wanted a tool to take secure notes in Markdown, accessible on all my devices. You know, like enhanced README files—visually pleasing, well-formatted, and most importantly, password-protected to secure my secret thoughts and world domination plans.

At the time, after searching in vain for a suitable tool available on both Windows and Mac, and naively thinking it would be easy to develop... I decided to embark on creating this little application... Just a small text editor, right?

Haha, what sweet delusion!


The Early Versions: A Secure Text Editor

So, I dove into developing the app using Electron/React to have the same application on Windows and Mac. Easy, right? Oh, if only that were true! What was supposed to be a small project quickly turned into an epic journey through months of development, trial and error, and a deep dive into various editors before finally settling on Monaco, the library behind VSCode.

Then came the task of publishing the app on the Apple and Microsoft stores. I had this bright idea that creating a developer account would be enough... What a naive thought! 😅

  • Apple: Ah, the joyous world of certificates! Getting these precious keys to sign the app was an adventure in itself. Then came Apple's validation, where every pixel of your app is scrutinized with a magnifying glass.
  • Windows: Now, this was a real obstacle course! I had to register my business to get an app signing certificate, create a website to prove my company's existence (even though I’m just a freelancer), all to satisfy the auditors who, not content with their coffee, wanted more proof of my legitimacy.

And to top it all off, I needed approval from ANSSI 🤯 (National Agency for Information Systems Security) to validate the use of encryption in the notes. Yes, you read that right: government validation for a note-taking app! Picture me laughing nervously at each new bureaucratic hurdle. Finally, after months of sweat and a few bouts of desperate laughter, I managed to get my app published on the Windows Store and Apple Store. Victory!🎉

But seriously, all this effort for a free app. I now look at free apps on the App Store with newfound respect. These developers are true heroes, just for surviving this infernal process.

you are a hero

The Shift: From Text Editor to Executable Notebook

From this point, things started to get complicated...

As I stored code snippets and bash commands in my app, a brilliant (or insane, depending on your perspective) idea struck me: what if I could execute these code blocks directly in the editor? After all, it can't be that complicated, right? It's just some JS. Oh, the innocence of ignorance...

comic strip: Are you serious?

Indeed, between running a simple console.log and creating a complex bundle using modern NodeJS libraries with ES6 keywords like import or async/await, there's a chasm! Here are some of the joyful complications I faced:

  • Fully understand Babel to integrate it: To support modern syntax and JSX because why settle for simplicity?
  • Writing custom plugins: To manage NPM dependencies and integrate them dynamically because everyone loves a good puzzle.
  • Integrating a bundler: To create bundles containing all the code and its dependencies, because why keep it simple when you can complicate things?
  • Code completion: Because typing code without help is like trying to cook without recipes – you end up with something incomplete and probably unpalatable.

I also had to dive into Monaco's code to add internal services, manage code completion in an unsupported mode, and make a full fork of the WYSIWYG editor to fix bugs and add the necessary features. You know, the deeper you dig, the more you realize how deep this hole is.

Users seemed to like these changes but asked for more and more development features, but it was too late to turn back. I kept adding features for not months but years!

black hole

Online Deployment: Designing a Cluster

Not satisfied with just running code locally, I decided the next logical step (at least in my mind) was to allow users to deploy their creations online. This included full-fledged applications, interactive dashboards, and sophisticated automations.

comic strip: Are U creazy?

My first idea was simple: just upload the binaries generated by project to a remote server and run them. But, of course, things quickly got complicated:

  • How to handle scaling across multiple servers?
  • How to ensure optimal isolation of execution environments?
  • How to configure access security for each deployed application?

These questions forced me to adopt a much more complex approach than a simple server deployment. Instead of turning to costly solutions like Kubernetes or Docker in SaaS, I decided to create my own custom solution. The efficiency of my cluster relies on clever management of proxies and Docker containers. Here are some of the delightful complexities:

  • Creating an Intelligent Proxy: Because managing specific configurations for each app is like juggling swords, but virtually.
  • Docker Container Isolation: To handle the execution security of applications because an app without Docker is like a developer without coffee.
  • Dynamic Resource Optimization: To maximize server efficiency because why use 100% of resources when you can do everything using 200%?
comic strip: Man with boxes falling

For those interested in the nitty-gritty of this technical odyssey, I’ve written a dedicated article on creating the cluster here: 👉 link here

And now?

After all this work, I realize that such applications usually have entire teams of developers and significant funding behind them. I often feel tiny compared to such competition, but I don't give up.

comic strip: Did U have more customers at least?

Yes, because the application provides quite interesting features. It's a cool Note app that can create charts, execute actions and tasks from your notes through code blocks. It can even deploy dashboards, APIs, and CRON jobs.

But to be honest, all this work... That's a lot for a single person and it was not at all planned to go this far 😅.

But most importantly, even after 3 years, I’m still fired up about working on my project. I’m driven to deliver the best possible experience for notebooks and note-taking, and the positive feedback from users keeps my spirits high. So, to all the app creators out there: keep dreaming big, but maybe try not to take the most complicated route like I did... your sanity will be grateful!

Thank you for following this technical journey with me! If you have any questions or comments, feel free to share them ❤️.