TodayIngoLearned
TodayIngoLearned is a small personal project that I started to experiment with PWAs and full-stack Node.js a while back. It's a personal knowledge/learning management system used for every day (informal) learning. Since I now actually use the tool as part of my personal knowledge/learning management, I wanted to share it!
Be aware: As I started this as a personal learning project to learn about Node.js and some other technologies, the code is really not very good and leaves a lot to be desired. I hope that at some point I'll find the time to really go back to this!
You can find a detailed blog post about this project and its scope on my personal website.
Use Case and Features
TodayIngoLearned (inspired by reddit.com/r/todayilearned) is essentially a database in which you can store whatever your learned on a particular day. Each learning is one TIL - an entry in the database containing information about what you've learned.
Features
- Progressive Web App (PWA) - installable on Android/iOS (very limited caching)
- Multi-user support
- Markdown support
- Tagging TILs using hashtags
- Commenting existing TILs
- Bookmarking
- Searching for titles, hashtags, and dates
- Viewing random TILs
- Basic spaced repetition system for studying TILs
- Rudimentary dark mode
Usage
Internal Linking
You can link to other TILs using the [[Title]]
syntax.
ToDo
I use a #todo
tag to label TILs that require further works. For example, sometimes I don't have the time to immediately write a TIL. Hence, the navigation has a shortcut to /tag/todo
.
Installation
Traditional Way
npm install
node install.js createdb
node install.js populatedb
node server.js
Also consider the settings in config.json
. If the option lowercasetags
is true
, all tags will be converted to lowercase. Also make sure to change the expresssessionsecret
.
If you plan on running this 'in production'
npm install pm2 -g
pm2 start server.js
The install.js
script also will allow you to create new users (node install.js newuser username password
) and to change a user's password (node install.js setuserpassword username new_password
). Use node install.js refreshtags
to refresh/rebuild all tags.
Docker
Alternatively, you can create your own Docker container to run TodayIngoLearned. I've provided a very rudimentary Dockerfile (not based on pm2) in the repository to get you started.