NoteD.
Empowering personal growth through shared knowledge.
This website helps to create personal notes, share them public, search for notes on a specific information source or interesting topics and save them, follow users and be followed by others. The project was created for my educational purposes, but has a practical application.
๐ About
The goal of the project is to develop a system for creating, storing notes and searching for notes by sources of information.
A note is a summary of some material, for example: a book, video, course, article, etc. A source is a some information material. The user can search for public notes or notes by the name of the Source. The user can create public notes and drafts, subscribe to other users.
The benefit of this project is that a person studying any material reduces the time for taking notes.
Users can:
- look for notes of other people;
- start writing notes from other people's notes;
- to study the material in a short form, according to other people's notes;
- skimming over existing notes to find a Source to study something
- etc.
Main useful features:
- Create public notes (and drafts)
- Create a note on a specific source
- Copy (fork) and edit other's notes
- Search notes
- Search notes by a specific source
- Search for sources and list of notes on them
- Download notes [md, pdf, html]
Additional features:
- Add tags to notes
- Search notes by tags
- Subscribe to tags
- Follow users
- Pin your important notes
- Add notes to bookmarks
Notes are created in the markdown editor. The editor supports preview, split editing, full screen editing, hotkeys.
Dark mode / code highlight / code full-screen / mobile version.
๐ฅ Features
Feature | Description |
---|---|
User Accounts | Users can create an account to access additional features, log in to their account. Social authentication is also supported with Google, GitHub, or Yandex accounts. |
Content Management | Users can create and edit content using a user-friendly interface (WYSIWYG Markdown Editor), and content can be tagged for easier categorization and searching. Users can also bookmark posts to easily access them later and like posts to show their appreciation. Posts can be downloaded in Markdown, PDF, or HTML format. |
User Interaction | Users have a profile page that displays their information and activity (notes). Users can follow other users to see their activity and share content on Twitter, WhatsApp, and Telegram. |
Search | Users can search for content based on keywords, tags and sources. |
Design | The site uses Twitter Bootstrap for responsive layout and UI elements and is designed to be mobile-friendly, and the site offers a dark mode for users who prefer it. |
Internationalization | Site is available in both English and Russian |
Code Tests/Documentation | Code is documented to make it easier to understand and maintain. Automated tests are used to check for functionality, identify bugs, and ensure optimal performance. |
Caching System | Site uses caching to improve performance. Asynchronous tasks are used to improve responsiveness. |
GitHub API Integration | Site integrates with GitHub API to render markdown files in the HTML format (with code highlighting). |
๐ ๏ธ Tech stack
๐๏ธ Installation
- Prerequisites:
sudo apt install g++
sudo apt install build-essential
sudo apt install libpq-dev python3-dev python3-pip python3.10-venv
sudo apt install wkhtmltopdf
for PDF files generation.sudo apt install gettext
for translation.
-
Install PostgreSQL and create new database.
To use trigrams in PostgreSQL, you will need to install the
pg_trgm
extension first. Execute the following command to install thepg_trgm
extension inside a database:CREATE EXTENSION pg_trgm;
-
Clone or download the repository.
-
Create and activate virtual environment and install requirements from
requirements/local.txt
using Python 3.10. -
Fill
.env.dist
file with required data and rename it to.env
. Minimal requirements areSECRET_KEY
and the database cofiguration (but then the functionality will be limited). -
Make migrations and migrate with a custom command[1] or via Makefile[2].
# [1]
python manage.py makemigrate --settings=core.settings.local
# [2]
make setdb
- Set up a cache backend or set a cache backend with following code in
core/settings/local.py
:
CACHES = {
"default": {
"BACKEND": "common.cache.RedisDummyCache",
}
}
-
Set up Celery worker and Celery beat.
-
Run the development server with one of the following commands.
# [1]
python manage.py runserver --settings=core.settings.local
# [2]
make run
๐จโ๐ป Team
- Pavel Loginov (Backend/Frontend)
- Eduard Antadze (DevOps)