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.
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.
- 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
- Export TILs as markdown
The CLI (install.js
) support the following commands:
Command | Description |
---|---|
createdb | Create an empty SQLite database. |
populatedb | Initiate an empty DB and add a first user. |
backupdb | Create a backup of the current DB. |
adduser user pass | Add a new user to the system. |
listusers | List all users. |
setuserpassword user pass | Change a user's password. |
refreshtags | Regenerate and refresh all tags. |
showtil | Show TIL based on its id. |
You can link to other TILs using the [[Title]]
syntax.
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
.
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' 😅, I would recommend using pm2 to run the server.
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.
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.