GithubHelp home page GithubHelp logo

notedown's Introduction

Notedown

Update: The site is no longer live. Additionally it used a now-outdated version of Meteor so it may take some work to get it to run locally with the lastest Meteor version. As such this repo exists mainly as an archive now.

A free note-taking app...

Notedown Usage Gif

What is this?

Notedown is an app for quickly taking notes. I conceived this idea while working as a software consultant. Clients would often continually speak for minutes on end, so I wanted a quick and easy way to take notes about what was being said.

The app is totally free and I currently have no plans to monetize it.

Usage & Features

Using Notedown is simple: Just type in the large input box and hit enter. A new note will be created.

The more interesting features of Notedown are not so obvious:

  • Create Actions be putting a ! at the beginning of the note. Actions will be orange.
  • Create Questions by ending your note with a ?. Questions will be blue.
  • Use Markdown syntax throughout your notes. We parse Markdown as GitHub Flavored Markdown.

The best way to get to know the app is simply to use it. The offline version doesn't require login and contains most of the features of the full app. You can find it here:

Development Notes

Meteor Gotchas

  • Definitions should be placed under lib/. For example, I had initially defined collections/ at the root level, but they were then getting loaded after I needed to use them. Lame.

  • Look at the following code:

    // Seems to work at first, but isn't reactive
    Template.name.helpers({
      someCollection: SomeCollection.find({ key: Session.get('value') })
    });
    
    // Works. Fully reactive
    Template.name.helpers({
      someCollection: function() {
        return SomeCollection.find({ key: Session.get('value') });
      }
    });

    The bullet point is, reactivity will not function unless the reactive data source (in this case the session & the mongo cursor) is wrapped in a function. If it is simply defined on the object we won't get reactivity.

Already Done

  • Preferences (markdown on/off, default sort order, password reset, email settings, etc)
  • UI performance improvements (Refactor Meteor methods implementation of create/update)
  • Bug Fixes (see Issues)
  • Write /about copy Nevermind, no need for an about page yet
  • /feedback page
  • Setup mailgun so that I can receive mail sent through the feedback form
  • Build out demo
  • The main note and client entry input should be a textarea that resizes itself
  • Shift+enter doesn't work everywhere
    • As a caveat, this still does not work for power notes in the offline app. This is super strange as it still doesn't work even when using the event handler of the normal power notes (which do work).
  • Resetting a note if you edit it and change the text to nothing doesn't work.

Roadmap

These are all features I'd like to implement, but they are contingent on my own time and how much use I (or anyone else) actually gets out of the app initially.

Initial Release (1.0)

  • Need to style the markdown within notes to allow for things like buleeted lists and such.

Next Release (1.x)


Urgent:

  • Shift enter to add a new line instead of save
  • Multiline support using shift+enter
  • Markdown support (GFM)

  • Notebooks vs clients
    • Don't use 'clients'. Instead use 'notebooks' to separate notes.
  • How-to Guide
    • Simple static page with instructions for basic Note CRUD.
  • Settings Page
    • Password Changing
  • Password Reset
  • Email Verification
  • Data export
  • Add a separator between notes added on different dates
  • Instant search
    • Fuzzy finding
    • Highlighting of search terms in matching notes
  • HTTPS on all pages (self-rolled)

Wish List

  • Facebook-esque multiline support. "Enter creates new note" checkbox. Defaults to shift+enter adds newline. When unchecked must click button to submit. Enter adds newline.
  • notedown.<tld> domain name. See what TLDs are available.
  • Commercial HTTPS
  • Database Backup (Likely to AWS Glacier)
    • This will likely be harder to implement because I don't have a background in security.
  • Relative dates for notes and clients
  • Guided tour
  • Pagination on archives page
  • Reordering (dragging. Will need to implement custom order)
  • Sorting (custom order, date added, etc)
  • GitHub, Facebook login
  • Custom 'types' (choose a token, pick a color, then all notes prefixed with #{token} are set to that type)
  • Add a photo to a note (drag and drop)
  • Translation/Internationalization
  • Collaboration
  • Responsive (this is not particularly difficult, but it just doesn't seem necessary for this app. It was built entirely to scratch my own itch, and mobile usage is not high on my list of prorities)

notedown's People

Contributors

iansinnott avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

notedown's Issues

The client select dropdown only has one-way reactivity

Selecting a new client from the dropdown works great for updating the entire UI. It also works fine when we drop straight into a URL like notes/:clientId. But when you click a normal linke like the current link with an href of /notes/me the dropdown does not update to 'Me'.

nano_and_localhost_3000_notes_me

The image is actually a bit misleading, because the currentClient is in fact my user ID, it's the dropdown that is not reflecting reality.

Add loading spinner to feedback page.

Currently it really doesn't give the user and good feedback. In fact it clears the form and doesn't disable the sdubmit button, which could potentially lead to confusion while we're waiting for the callback.

Loading Header should not display site title

This is at the very least true of the landing page. It looks strange to see the loading icon with full header for a second before the small logo dissapears and is replaced by the banner. See pic:

screen_shot_2014-11-22_at_8_35_21_pm

Add Delete button to Notes

In the notes section you can only archive notes currently, add a delete button there as well so that it's easier to delete unwanted notes without having to first send them to the archive.

Replace 'demo' with 'offline'

Rebranding demo as offline mode. This makes more sense to me anyway. Demo sounds limited, and although the offline mode is limited it's not to force a user to pay for the app, it's simply because some app features require true persistence, and a user ID in order to function correctly.

Change 'Clients' to 'Notebooks'

It would make sense to use this app for client calls as well as other stuff. Using the word "client" seems to force my initial view of the app on anyone that uses it, which isn't my intention.

Slow UI

The creation of clients and notes is noticeably slow. This is of course a huge problem, since notes need to be able to be taken quickly on the fly.

My guess is that the issue is using Meteor Methods. They reside server-side, so I'm guessing they don't get to take advantage of Meteor's signature latency compensation. I need to see what the preferred way to securely CRUD models is while still taking advantage of latency compensation.

  1. See what the docs/community say about meteor methods and their use. Is it true that they get no latency copmensation?
  2. Look into allow/deny as a means of allowing client side code to do CRUD without compromising the whole site.

Add Feedback page

This will require adding email support. Apparently meteor recomends mailgun. Maybe mandril though?

Rename "Feedback" to "Contact"

In initial user testing it wasn't entirely clear what the feedback form was for. I say this because after thinking about it I did intend it for general contact, and not specifically product feedback.

A also raised an interesting point that he wanted a "Submit anonymously" button if the form was for feedback. Of course I knew that you could just add a fake email, but that wans't apparent to him and it probably wouldn't be apparent to most non-technical people.

Demo

The demo for the app needs to be built. This should potentially not be difficult. I'm thinking just use an empty collection for notes and disable client/archive functionality. Archive might be able to stay, but clients are tied to the DB.

What would be nice is to save the demo models in the users browser so they wouldn't lose any data and the app would actually be fairly usable without signing up for an account. This may or may not take some work. Perhaps the collection-hooks plugin can address this.

The other advantage of local storage would be importing the users Demo notes into the main app if they did decide to sign up. Food for thought.

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.