GithubHelp home page GithubHelp logo

xy2z / dopenote Goto Github PK

View Code? Open in Web Editor NEW
24.0 24.0 9.0 3.17 MB

๐Ÿ“ Self-hosted modern webapp for notes - Free and open source - (WORK IN PROGRESS)

Home Page: https://dopenote.gitbook.io/docs/

License: GNU General Public License v3.0

PHP 74.97% Dockerfile 0.96% Vue 3.06% Shell 0.78% Blade 20.23%
dopenote floss foss laravel notebook notes php php7 vue

dopenote's People

Contributors

calvinmorett avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar martindilling avatar mazedlx avatar mjunaidahmad avatar ognjen-petrovic avatar xy2z avatar zvvysotskaya avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

dopenote's Issues

2FA - Google Authenticator - Login

On the login page, if the user has enabled 2fa, the user must enter the correct 2fa code to login.

Only show the 2fa form if both email and password are correct.

The UI is made using Bulma.io

Let me know if you have questions.

Sort Notebook (order)

Sort the order of the Notebook in the sidebar.

The best UX is to have drag and drop IMO.

Docs

  • About
  • setting up
  • Contribution
  • Code standard

I will use Gitbooks for now, maybe with github repo so people can make PRs..

User settings

Settings

  • Change password
  • Change email

Customize

  • Editor Font (Verdana, Arial, Tahoma, Helvetica, etc.)
  • Editor Font size
  • Editor font line height

In the future this will also be where the user changes color-scheme and compactness

Will add Google Fonts later

Show app version in "footer"

When the Docker image is built, it should get the current git tag as an env variable, so in the code we can show what the current version is.

This probably means the Dockerfile should install git, get the latest/current tag, and uninstall/purge git after that.

I was hoping Docker would set this env automatically, but apparently it doesn't.

"footer" means below "sign out" link in the left sidebar.
Maybe also show it in the login/register/forgot-password pages in the footer.

Starred view

A view with only Starred notes - from all notebooks.

This should probably also be the default view when opening the webapp.

Trash view - restore/delete notes

A view of deleted notes - right now they are only soft-deleted.

Sorted by last deleted first.

Buttons

  • Restore note
  • Permanently delete note (with confirm)

Add a database seeder [good first issue]

Create a user with email admin@localhost and password 12341234

Remember to call RegisterController::create_new_user_note($user); which creates the default note for the user.

When deleting a note, the view should change to a note in the active notebook

Right now it just changes to the first note

If there's more notes in the notebook, pick the first on found.
If not, pick the first note (in another notebook)

Or, maybe show "No notes in this notebook" text when there's no notebooks - and just show that and remove the window.location.hash, so it doesn't change notebook.

Multiple windows/tabs issue

The problem

Lets say a user has 2 windows open: window-A and window-B.

If the user changes note content in window-A, the change isn't registerd in window-B, unless the user refreshes the page in window-B.

So if the user changes the content of the same note in window-B, the change from window-A is gone.

The issue not just content, it can also be deleted notes, deleted notebooks, new notes, etc.

The Solutions

  1. Syncing all tabs. This probably requires sockets? I think this is a bigger task, and will save this for later (v2)
  2. Error when saving a note that has changed since page-load-time. This is probably the easiest, but also the most annoying for the user, since they are getting "errors" and have to copy the content and manually merge them.
  3. Only allow 1 tab open at a time. Altough I'm not sure how, but this seems like the best solution without going full socket. But maybe this needs sockets anyway? I'll have to research.

#1 is definitely the goal, since we need Collaboration anyway - see https://tiptap.scrumpy.io/collaboration

question

Hi!
You have a stunning application! While application is getting larger it is hard to track errors. Would you mind if I create a feature test to your app?

Loading screen

When loading the app, show a nice loading "screen" untill Vue is complete.

Undo & Redo bugs when changing notes (History)

It uses history for the other notes...
So maybe a new editor instance per note?

Reproduce

  1. Enable History in tiptap (resources/js/components/EditorContent.vue file)
  2. run npm run dev (or npm run watch)
  3. Login on Dopenote
  4. Edit note content
  5. Change note
  6. Press CTRL+Z
    and content changes to the previos note content.

History should be per note. I'm not sure what a good solution to this bug is, so for now I've disabled history...

Archive view

EDIT: Backend is done (see PR #123)
So only the UI is missing.

About

It should be possible to archive notes, just like Dropbox Paper. Archived notes are removed from the notebook and all put in the 'Archive' view. Archived note cannot be edited, just like trashed notes.
When archiving a note, remove the 'star'.

How to

See how 'Starred' and 'Trash' view are done.
Create a new column in the notes db table archived_at which is a timestamp that can be NULL. The same way deleted_at (trash) is done.
Use FontAwesome to find a archive icon.

Let me know if you have any questions

Export notes

I think the best option will be to export each note as a .html file in a single zipped file.

It would be nice if each note was put in a directory for each notebook, and trashed notes put in a "trash"

The "Export notes" link should be under "User settings"

Please only do this if you have experience with this, as is could be a potential security vulnerability if the files aren't deleted or the zip isn't deleted after download, etc. I think the best option is the put the file content directly in the zip in memory without saving it to the store, but I haven't researched if it's possible, or could lead to memory issues.

Let me know if you have any questions - I'm open to other solutions

Themes (color shemes)

Css color schemes
For v1.0 i think we should have at least 3 themes

  • default (how it looks now)
  • dark
  • minimal/simplistic (white/lightgrey)

Imo we should use pure css color schemes so when the user changes theme (via user settings) it changes immediately without needing to refresh the browser

Dockerfile

  • Removed unused files after build (or using .dockerignore) - see below
  • Build npm run prod in Dockerfile and gitignore public/js files
  • Setup automated builds for tags on Docker Hub
  • Fix issue with doctrine/dbal not being installed by composer?
  • Update docs with a complete docker install guide

Docker image size before cleanup: 628 MB


Remove after build (end of Dockerfile)

  • Resources/js
  • Seeds
  • Gitignore
  • Storage/dopenote
  • Tests?
  • Editorconfig
  • Env example
  • Artisan (no. keep it for running migrations, etc)
  • Composer.*
  • Package*
  • Phpunit.xml
  • Webpack.mix

Also see https://medium.com/@gdiener/how-to-build-a-smaller-docker-image-76779e18d48a

500 server error

Hi,
It often happens that a server crashes when a user presses keys quickly, hold down backspace key...

image

I intend to add some debounce in order to avoid saving content on every update. What do you think?

Editor settings

In User Settings the user should be able to change editor font family, font size and line height.

IIRC the UI and backend is already done and should work.
The only part missing is the settings is not being used.

Remember to remove the todo text on user settings page :)

Let me know if you have any questions.

Pressing TAB in the editor should insert a TAB

Right now when you press the TAB key in the editor, the focus changes to the next element.
But instead, it should insert a TAB whitespace in the editor, for code and stuff, if it's pressed while the editor is in focus.

You can add it in the bottom of editor_events() in resources/js/assets/vue_init.js

Let me know if you have questions.

Authentication

  • Login
  • Register
  • Forgot password + reset
  • Username should be unique
  • Defualt create a notebook + note for new users?
  • Browser should remember/update password after login.
  • Update user_id in code (NoteController, NotebookController)
  • Validation, check note/notebook is mine when changing/deleting/etc. (Middleware?)

New task: It should be an option to allow signup at all (app settings).

Delete Notebook

I've just tested with Notejoy and when clicking "delete notebook" a confirm pops up: "Are you sure you want to delete NotebookName and all of its notes?"
If yes, all notes are moved to Trash.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.