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.jsAlso 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.jsThe 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.
Use nodemon server.js to get a development server up and running.
