This is poetry. I have been working on a personal project for the last 10 years that replaces every other app I used to use - E-mail, calendar, and all the others we all use on a daily basis - and every time someone sees me using it they ask "Wow, this is amazing, how do I download it!?", and the answer is always the same: you don't.
There's a beauty to engineering something having yourself as the target user, and no one else. I'm 100% convinced this project single-handedly keep my mental wellbeing in check, and it provides me with a constant source of hopefulness and happiness to the future - that no company/salary could ever offer me. My exclusive, differential, unique characteristic against the world, my joker card.
> There's a beauty to engineering something having yourself as the target user, and no one else.
100%, I'm following a similar approach to you with yet another notes app solely for my own use.
Have you written more about your personal project anywhere?
One thing I only realised once I started building my own tools, is that you become - from day one - an unmatched world-class expert in using that tool. This seems obvious and inconsequential on the face of it, but how many pieces of software do you use where you can say with 100% certainty that you know every single thing about it?
Every feature, every shortcut, how it all works internally...
It's only when you use something self-crafted that you realise what this actually means. If it's a tool that you use for work or productivity - you can become exceptionally productive with it due to this from-day-one "total mastery".
This compounds if you iterate. Using the tool daily and feeding back in little fixes and optimisations as you go. The tool grows with you and molds to your use of it over time.
It's obvious that the tool is going to be well suited to your needs if you built it - but it was less obvious to me ahead of time what benefits the side effect of "total mastery" would also bring.
For me, my notes app is now used as my personal knowledge base, project management tool, todo list, daily planning tool and for journalling. Because I built it, I'm extremely effective at using it - and it's lean and fast - only with the features that I know I need.
In addition to being a very fulfilling project - it has created a degree of leverage and efficiency that I didn't expect!
My conclusion is that we should all experiment more with creating our own tools.
> Have you written more about your personal project anywhere?
No, I've had plans to create a blog to write about it or make a YouTube video, but haven't come to it yet.
> One thing I only realised once I started building my own tools, is that you become - from day one - an unmatched world-class expert in using that tool
This is something that I've also realized - a lot of times when we interact with software we kinda just fly by its UI to accomplish a goal, not paying much attention to its secondary features, options, quirks, etc - But when you write your own software, you have a map of everything in your head, and you don't have to guess what exactly a button does, how it does it or where you need to go to do that.
> But when you write your own software, you have a map of everything in your head, and you don't have to guess what exactly a button does, how it does it or where you need to go to do that.
Absolutely! It's quite a unique experience. When I started out it felt like I might just be wasting time and reinventing the wheel but in retrospect it was absolutely a good time investment!
Honestly, a stream of thoughts 1.5hr video about it all would be a cool listen. Not that it has to be 1.5hr but I’m sure your unedited thoughts will have some great insights
I remember recommending a non-iPod MP3 player that had a ton of customization options directly on the device. I regretted it because the person that bought it expected it to work exactly like an iPod plus the bells and whistles I recommended.
> For me, my notes app is now used as my personal knowledge base, project management tool, todo list, daily planning tool and for journalling. Because I built it, I'm extremely effective at using it - and it's lean and fast - only with the features that I know I need.
Hey same!
What inspired you? Anything you would be willing to share about it?
For me, I used a different notes app which I liked, and wanted to learn a new language/framework so I wrote a new backend for mine, and it just kinda spiraled.
The next thing I wanna do is add a CalDav interface so I can store events in it, and interact with them constantly with everything else I do.
Evernote originally inspired me (back in the day) as to the value of having some sort of personal knowledge management tool.
More recently Obsidian inspired me in terms of showing me what a non-enshittified, open/portable format note-taking experience could be like. And the beauty of simple Markdown notes!
Through the Obsidian community I discovered the concepts of Zettelkasten / Second Brain etc. and was further convinced of the usefulness of regular note taking and storing/synthesising of reference knowledge.
But I found Obsidian slightly mismatched with my requirements. Primarily because there was certain functionality I needed which can only be achieved with plugins, but I didn't consider their plugin security model to be sufficient enough for storing my most confidential data - even with everything being local files. (That and the lack of open source was enough to make me nervous).
My app is written in pure Javascript, heavy use of web components, running in Electron. No Node.js (apart from what Electron is precompiled with) - so no third-party dependencies as part of my code, and Electron is heavily locked down. I have a lightweight build step using Esbuild (a single rust binary).
Being 100% native JS - no frameworks - and quite lightweight, the app is indistinguishable from a native macOS app in terms of responsiveness! Knowing that may not always be the case, I'm also eyeing up Tauri as a potential alternative GUI "wrapper".
As a .NET developer by day I would have liked to have built it in MAUI but found that to be quite lacking for my purposes.
I've started to write a blog article about it with some screenshots - I"ll eventually get around to publishing it!!
How about you? What did you write your backend in and did that escalate into the front-end too?
The CalDav idea is very interesting... you've got me thinking about that.
Ah obsidian... I feel it's a very common tool. There's a whole pile of clones/related projects too (LogSeq, Roam, etc).
What kind of functionality were you looking for? I've found that once I controlled my notes, the amount of things I wanted to dump into it kept growing.
> How about you? What did you write your backend in and did that escalate into the front-end too?
I started using TiddlyWiki, and really like their approach to content (small notes, composable content, the "river" of notes as you click through links). You can add metadata (KV style) to the notes, which you can use in the markdown, which is quite powerful. The tool is meant to be "in browser" and you're supposed to save the whole HTML source when you make an edit. For me, I wanted a traditional CRUD interface to a server. They support that, but the developer isn't really focusing on it. So I wrote my own because I had a few weeks and wanted to play more with Golang.
My only gripe, and the reason I'm considering writing a new front end (which will be a big learning activity for me), is that TW doesn't support 'lazy loading'. very well, so if you have a massive amount of notes, it gets a little wonky. I discovered the issues with this when on plane WiFi and getting issues with overwriting instead of editing notes.
But once I had a CRUD API for my notes... I started going crazy. I can import photos, and link to them (pretty basic) but I can also push emails, calendar events, etc. I set up a browser plugin that lets me automatically take notes on any webpage, and adds tags/metadata to the note. The limit is now the front-end which is where I'll probably spend 2024...
I also had the idea of integrating with HomeAssistant, so the device's history was viewable in a 'note' about the device (dynamically generated from a template instead of static text from DB). Possibly with camera events as their own entry... Lots of things are possible once you control where the data comes from.
I’ve made a poll/group decision making app for my family and friends, and i’m this close to starting some sort of collaborative note/list making app because apple notes causes us so many headaches
I did two yet another notes apps, one including a custom P2P sync backend, All abandoned for Google Keep, but it was definitely interesting.
Ever so often I think about trying again, which I might in fact do if Keep ever becomes paid or stops working well or anything like that, or battery-free Bluetooth gets cheap and common and I decide to integrate inventory tracking features.
I think if you enjoy the process and the result is useful to you, then it's definitely worth trying again!
I don't know about you, but I always learn a hell of a lot through my personal projects too. They've almost always been a good investment of time for me.
I wish more people would take stuff like this, oss it, and disable PR requests and issues. Let others use it / learn / build on it with the clear expectation that feedback and contributions are unwanted.
To be fair, when you do that you would approach coding the application differently, which adds to development time. Also, it can change the whole mentality of developing it. Probably why more people don’t do that, though I agree it would be nice.
Time to coin a new word - enossification - like enshittification - which I came across here recently, but without the negative connotation of the latter.
Can you elaborate on what you would need to do different in terms of dev? The only thing I would do differently in this scenario would be to ensure no secrets or anything gets into the code which is a minor lift but also probably for the best.
I have my secret perversions as well, so I've got no judgement for you, but I do have to wonder how our editing styles differ if you find that easier to navigate than the equivalent nested for loop.
for bar_vec in bar_mat:
if bar_vec != []:
for y in bar_vec:
if baz(y):
for x in y:
foo(x)
Seeing it written out here, the example looks nice. In real code with more complexity, it takes longer for me to write it, and it usually takes up a lot more space than this. It bugs me how much space it takes up for something that is one idea in my head (Foo all the baz things in bar_vec).
But if there is anyone coming after me, I would write it in this style for their sake, because this style is easier to change.
At least in my code, these nested loop thingies are rarely unique. If I have to do it once I probably have to do it many times. If I'm being mindful, I stop repeating myself and just write a generator so that I can invoke it like:
[foo(x) for x in nonempty(bar_mat)]
Mostly this is because I live in fear of ruff's complexity warning, C901.
I dunno, that seems to be just shame instilled by the toxicity of certain programmer culture.
I mean, it's not the clearest thing to read but labeling it horrible seems to be a judgement call that's unwarranted. And as software developers, we should create an environment that's less hostile to people who write things in ways we wouldn't.
And honestly, that set of list comprehensions has a bit of a lispy functional vibe, which could quite frankly be applauded in certain contexts.
I assume the issue is you self-censor more and have to do things exactly by the book.
I've never been particularly interested in "software for one person" but I've shared lots of working but not great code(years old from before type annotations that hasn't been touched much since, written a hurry, etc), and faced some embarrassment.
If I was actually attached to specific details of the style, like "Yeah it crashes on some JSON input, but I don't care, it's only meant to handle stuff from this other thing I made" I might not really like sharing it as much.
I disagree with this. If you are truly building for yourself there is no criticism, no prying eyes, it is well and truly yours. Even with PR and issues closed people read it, maybe comment about it on social media or hackernews. There is beauty in a creation that is complete private.
> I have been working on a personal project for the last 10 years that replaces every other app I used to use - E-mail, calendar, and all the others we all use on a daily basis
Would you be willing to describe how it works / record a video of how you use it? But maybe that goes against your last sentence:
> My exclusive, differential, unique characteristic against the world, my joker card.
?
I guess the idea is that you integrated all the apps with each other, such that you can create an event from a text message, forward an email to a Signal contact, this kind of things?
I quickly write scripts to automate things I do several times, but I didn't go as far as integrating all my scripts into a single one. Having things decoupled reduces the maintenance burden, such that I'm not sure I'd want to go that way either.
> Would you be willing to describe how it works / record a video of how you use it?
I'll definitely do it in the near future and post it here on HN.
> My exclusive, differential, unique characteristic against the world, my joker card.
In the sense that, if one day money becomes short, I could extract a few SAAS out of it and make some money or even sell it.
> I guess the idea is that you integrated all the apps with each other, such that you can create an event from a text message, forward an email to a Signal contact, this kind of things?
Yes, the main app has standalone apps, where each app integrates with each other whenever possible, like listing contacts in the email app, and one of the apps is "Flow", where you can create IFTTTs between apps.
I'd love to read a post about this. I started making something similar actually before I got my most recent job. But it was with less pure intentions. I did have various personal requirements that I wanted to see if I could impliment in a singular organisation system, since I am chronically disorganised. However, I started actually doing it just so I could practice my java and have a complicated java project on my github since I was applying for jobs. That's really why it's died a bit afterwards.
I assume you choose the services you depend on wisely, to make sure it's possible to integrate with them? E.g. thinking of common apps like Facebook, WhatsApp, some email providers: they don't necessarily provide an API that you can call into, and sometimes you rely on a library a 3rd-party developed but which breaks regularly.
I write programs mainly for myself but also usually (not always) make them available for other people to use too in case they find it useful (or want to modify it, use a part of the code, criticize it, make backup copies, or anything else they might want to do with it). If I am annoyed by something someone else writes about it, I can just ignore it; it doesn't affect how I will use it for myself, and other people can still do what they want. (And, if someone does not want to allow others to criticize it and submit patches and bug reports and stuff like that, then you can still make the file available without allowing comments to be written about it, without discussion forums, without issues and pull requests in GitHub or similar, etc.)
Similarly, albeit with much less effort, I configured (neomutt) into the most beautiful and best, rapid UX mail client ever. I use it at work and for private purposes.
People are impressed when looking at it. A handful of them asked for the config. Don't think any one ever got used to it.
How did you configure neomutt? I mostly have the default configuration, with some other tweaks I've forgotten about (like changing mailboxes using a function key). What am I missing out?
What about SSO? Sadly, none of the terminal-based email clients I tried supported this, but since you said you use this at work, maybe it supports SSO login to your work email?
It's a bit of a trek to get there, but here's how to work around SSO...
1. Go to the Microsoft/Google developer console with your work account and create an "internal app" for personal use
2. Generate a set of oauth2 creds under the app
3. Use a program like mbsync or offlineimap to sync your mail down to a maildir. Iirc mbsync was more reliable but required a shim script to convert oauth2 creds to an api token.
4. Point your email client to the mail-dir.
I had this set up when I used gmail at work, but AIUI outlook should work roughly the same.
There's a ton of blog posts out there of people setting this up, unfortunately too many variations to have "one true" guide, so sorta have to pull from several places.
In this case it's easier to bypass SSO with a set of oauth2 creds, but the aws and azure clis support SSO login by opening a browser to authenticate and generate a short-lived api token that gets passed back to the cli. So it's definitely possible for terminal apps to support SSO.
I like this parallel, it connects to other metaphors like "digital gardening", aka cultivating information and cross-pollinating (adding links) to related pages.
Not OP, but how often do you have an app that is exactly how you want it? You might just shrug off the small annoyances, but you could fix them and make the app something that becomes second nature. The UI won't suddenly change, so you won't have to relearn how to use the app, just like you don't have to relearn physical interfaces.
for REAL. when I started using Emacs, everyone told me Emacs was old and I should use Sublime Text II or Atom. Now they all tell me Emacs is old and I should use VS Code. I wonder what they'll tell me to use instead of Emacs in ten years :)
It is only very rarely exactly how I want it. Often, I cannot even find software that is half of how I want it (and is sometimes difficult to change). So, sometimes I will write them by myself to work differently. But, other times another program can be modified as needed, but that is less common, to me.
I've used some horrendous software in the past and it's nice that - even though I can't fix that software - I can write my own software and make it behave exactly how I want it to.
I love it. I have a couple similar projects I've worked on in the past (a couple of which were what got me into engineering in the first place) and the clarity of vision you can achieve when you're really truly building something just for yourself is unparalleled. What follows is also a very unique sense of fulfillment; as you've eliminated all the societal contributors to the sense of fulfillment (which are of course fickle), what you're left with is something that by definition had to be made to make you and only you happy, and it lasts over time in a way that is durable and pure.
My greatest regret these days is how often it feels like I lack the time to do such projects -- but that of course is a cop out on my end! The hard part is only getting started and being consistent; you don't need to do that much on a week to week basis to get to somewhere really meaningful after a few years.
Tell us more about your project! Did you start it from scratch? Or did you use another opensource app as starting point and developed it further for yourself? What language is your app written in? Where do you run it? In CLI? or desktop GUI? The more you can share about it the merrier. I am sure others want to learn more about this too.
It's basically like the Google suite of apps or Next Cloud, I have the main app where you can manage your account, backups, etc, and it links to a bunch of other apps, each one living in a subdomain. The apps that already exists are:
- Password manager
- Finances
- Contacts
- Account (Backup, Restore, private keys, etc)
- Authenticator (OTP, TOTP)
- Email
- Photos
- Movies (2 parts, one is an IMDB like manager and the other is a Netflix homepage look alike for viewing content)
- Flashcards
- Link tracker
And I have the following apps in the development pipeline:
It started just as an MySQL database that I used to track my expenses and budget, later I started also storing passwords in it, quickly I realized that I needed a user interface, then I slapped a bootstrap theme on it (this was back when Angular 1 was all the rage), then it went through many iterations as across the years and the current one started back in 2020, it uses VueJS 3 and used to use ant design, but I had to create my own UI library to accommodate the sheer complexity of the custom UI needed. It runs on a raspberry pi with docker.
I like that law! My law for the past few years has been every app expands until it is beyond bloat, which is recognizable when it has the feature du jour, which can be found across every popular and unrelated app. At the time, that feature was stories, which could be found in Snapchat, instagram, Facebook, WhatsApp, Uber eats, and I think even Venmo at one point.
Once you got away from social apps, it was clearly feature creep. That was my indicator for when there was probably a better alternative app for accomplishing the app’s original purpose, but it was often too late to switch due to the network effect.
For my job, I've created a python ask and CLI that meets the exact needs of how I need to communicate with our API. It's leaps and bounds better than any postman collection my employees use
The code is a mess so I haven't shared, but it is something that makes me more productive every day.
Why would you want to combine it all into one app? Having seperate apps for those things (maybe besides having calendar and email together) sounds proper to me. Seems odd to put it all together into one.
Proper so that people who only want to use part of it don't have to use all of it. But if your user base is one person then why not go seamless? If you dislike that part of the app, just delete it.
I've been using i3wm for years and have recently started doing deeper dives into the sorts of things that you can do with what's either already installed or easy to add (e.g. rofi for input, conky for display) [edit to complete the thought:] I really love how flexible and relatively straightforward it is to script up simple applications that have a fairly significant impact on my "quality of life"!
I switched from i3 to bspwm a few years ago and I have basically a "complete" setup.
I do occasionally make scripts like you mention, they're super fun, handy, and almost impossible to share unless someone else has the same niche knowledge and requirements.
Curious, how deep does the DIY go? I am curious what tools you currently leverage to support your tool? For example, instead of using ripgrep, did you create your own easy-grep program? Or anything in that similar vein? Just curious of anything you’d like to share :)
I have often thought about creating an everything app for myself. Do you have it as a desktop app, or is it a web app you host somewhere? Would love to read a blog post about it if you have one or would like to write one.
As an old web developer myself, that surfed pretty much all the waves (No JS, just a Perl or PHP monolith, then JS with XMLHTTPRequest, jQuery, Backbone, Ember, WebPack, Angular 1 and finally React) this argument doesn't make sense. No, there isn't a new JS framework every minute. No, you don't need to learn a new thing everyday. There's really only 4 framerworks (React, Vue, Angular & Svelte, in this order), they pretty much do the same thing (Replace explicitness with declarativiness) and the only thing that changes is how you use them (Which you can learn in less than a week if you're a experienced developer).
The way we do stuff today is just a better and improved way to do the same thing we used to do yesterday, the fact that we have so much tooling is just a reflection of the fact that the web was created to serve documents and now we need to serve apps, so we need transformers along the way that allow for that 100% change of scope. But we aren't changing the base (HTML/CSS/JS, which we should), just the wrappers on top of it.
The problem in the past was primary browser incompatibility. That was why jQuery exists and was so successfull.
Different render output with different css settings was an other problem. But, thank god, since IE dies, this problems are solved for 99% of all use cases.
I got into a web development a few years ago, and I am so... what would should I use? Almost euphoric that I never had to learn to work around IE6 or Internet Explorer in general; that web browsers mostly support the same feature set now (shame on Safari for still not supporting Ogg, and on Edge for not supporting AVIF), and ECMAScript 6 being widely available is a blessing.
In 2006, tech decisions were easy: shall I use jQuery or Prototype.js? PHP or ASP? Postgres or MySQL?
Nowadays, after the long decision process to go serverless I choose Cloudflare from the 13 best serverless frameworks and VueJS from the 30 frameworks they support.
So I choose SPA from the four ways to deploy VueJS. I chose TS over JS. SFCs thank you very much. Setup syntax please! Composition over options all the way.
I'm in the promised land! Types! Components! No server admin! No DB admin! Let's actually make something!
Trouble is, 18 months down the line, the commercial charts library I wanted to use is pretty much unusable with this setup. I've been through about eight dropdown menu libraries. How many person-hours were wasted with abandoned vuejs dropdown menus I wonder!?
It's been easier to write a desktop application to do the same thing in about two months.
Right? Web development is orders of magnitude easier today than it was 20 years ago. We've standardized the web apis, we've standardized identity management and how to federate that management, we've standardized site interoperability, we've standardized site security - really, about the only choice you have now is which major framework do you want to use? And none of the above is still a choice.
Things are much, much easier today and work better for our customers. A true win-win.
I could almost agree, but for at least one aspect: 90% or more of today's SPA web apps are just glorified information pages, that do not need any React, Vue, Angular or Svelte. That is where the hype train shows. They could just as well be way simpler in design, and avoid having to reimplement (through a dependency or not) the back button. Many cases for actually multi page apps, that are needlessly implemented as SPA with additional router BS and tons of dependencies and a heavy framework, rather than simply going for server side rendered template and being done with it. This comes mostly pushed by frontend developers, who want their shiny framework of choice to be relevant everywhere. A job guarantee.
Your argument is sound but it does not support your conclusion; react native is an example of “changing the base”. It is missing a significant chunk of HTML and CSS as an implementation detail. It is not an improvement, and I treat it as evidence that approach will not yield an improvement.
The whole thread is about web development though, React Native is not web development. It's app development in React/JS, there are similarities but it's definitely not web development
> There's really only 4 framerworks (React, Vue, Angular & Svelte, in this order), they pretty much do the same thing
For me it looks there are only 4 frameworks in that category. htmx in my eyes feels like a welcomed step back from those. Closer to what we used to do before (server-side html generation and such), but with a small twist. I have not really used it, but React etc. never felt good fit for me, personally.
I've being developing my own micro-cloud for the last ten years - There I've wrote my own email client, password manager, finance book, OTP, movies, music, notes, calendar, backup... and a lot of other micro apps. It works fantastic for me, and I'd recommend you to try setting up an instance of NextCloud, which can achieve similar results. My problem with org-mode, Obsidian, etc is that they are attention black holes, you focus all of your time installing plugins and configuring your workspace that by the time you're done with that you don't really feel like doing the real work. If that's your case, you might consider removing apps that hinder you ability to control your life and just use a simple, plain, gigantic markdown file and grow organically from there, with the focus being simplicity and 0 config.
> I've being developing my own micro-cloud for the last ten years - There I've wrote my own email client, password manager, finance book, OTP, movies, music, notes, calendar, backup... and a lot of other micro apps
…
> My problem with org-mode, Obsidian, etc is that they are attention black holes, you focus all of your time installing plugins and configuring your workspace that by the time you're done with that you don't really feel like doing the real work
Not really, in the sense that the idea of a lot of these apps are "customization and plugins", and I wanted something that had it all, required 0 config and was totally opinionated. I can set up a new environment just by doing docker-compose up, that simplicity was always my goal 0.
Yes, it took time to develop it, but I would be working on another shiny thing anyway as I like to work on side projects, so I see that as a net gain.
I personally use Obsidian without any community plugins across two vaults, and it works absolutely fantastic. I do not plan to add any plugins to my installation(s) as long as they lack on some aspect pretty horribly.
I was able to consolidate 7 years of office notes divided in two applications in a week, 25 minutes day, into a new hierarchy, and did it with Obsidian as-is. I can't look from the perspective where one needs a month to optimize an application even before writing their first note in it.
I write small utilities to automate my infrastructure, yes, but they're not numerous as this. Instead of writing my own utilities, I automate workflows and write tools which sends me e-mails or push notifications when things go wrong.
The aim is to never receive notifications, actually. :)
I'm trying to reduce unnecessary time in front of computers, not maximize it. :)
Sorry I should've added an /s or something. I was mostly just making a joke about what you said vs what you were responding to about the Obsidian plugin detail where the parent mentioned that being the problem with Obsidian right after mentioned rewriting all basic utilities themselves for some reason lol
Haha, no :) I understood what you did there, and by taking your question literally, used your reply to add some more context about how I think, and create a bit more force to help OP by showing that other ways are possible.
Yes, what OP does is not very conventional, but I felt that redirection of this ambition to more practical ways can return OP as another productivity boost.
I'm sorry, I think it's cool you've setup your own micro-cloud and written all of your own apps but following that up by saying that installing a few plugins in Obsidian is an attention black hole is goofy. I feel like rewriting a bunch of basic apps that are built into basically everything at this point is probably a bigger attention black hole than installing a few plugins.
There's a beauty to engineering something having yourself as the target user, and no one else. I'm 100% convinced this project single-handedly keep my mental wellbeing in check, and it provides me with a constant source of hopefulness and happiness to the future - that no company/salary could ever offer me. My exclusive, differential, unique characteristic against the world, my joker card.