Skip to content

code128/takenote

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

A web-based note-taking app with GitHub sync and Markdown support. (WIP)

Warning: TakeNote is still in active development. You can visit takenote.dev to see the work in progress, but your account and the notes you create are temporary will not be persisted. All data will be lost once GitHub integration is complete.

Screenshot

Fast and simple

TakeNote was made by developers for developers - a simple, plain-text note-taking app for the web with Markdown support. What you see is what you paste. No WYSIWIG, no formatting pasted from the web, and no features you don't need or want.

Intuitive

Drag-and-drop notes into categories, instantly search through notes, and pin your favorites to the top.

Available anywhere

TakeNote is made for the web, so you can use it anywhere without downloading anything.

Beautiful

Enjoy a beautiful, clean design reminiscent of your IDE with light and dark themes.

Sync to GitHub

In progress!

Reviews

"I think the lack of extra crap is a feature." β€” Craig Lam

Setup

Pre-Installation

Before working on TakeNote locally, you must create a GitHub OAuth app for development.

Go to your GitHub profile settings, and click on Developer Settings.

Click the New OAuth App button.

  • Application name: TakeNote Development
  • Homepage URL: http://localhost:3000
  • Authorization callback URL: http://localhost:3000/api/auth/callback

Create a .env file in the root of the project, and add the app's client ID and secret.

CLIENT_ID=xxx
CLIENT_SECRET=xxxx

Change the URLs to port 5000 in production mode or Docker.

Install

git clone [email protected]:taniarascia/takenote
cd takenote
npm i

Development

In the development environment, an Express server is running on port 5000 to handle all API calls, and a hot Webpack dev server is running on port 3000 for the React front end. To run both of these servers concurrently, run the dev command.

npm run dev

Go to localhost:3000 to view the app.

API requests will be proxied to port 5000 automatically.

Production

In production, the React app is built, and Express redirects all incoming requests to the dist directory on port 5000.

npm run build && npm run start

Go to localhost:5000 to view the app.

Run in Docker

Follow these instructions to build an image and run a container.

docker build --build-arg CLIENT_ID=xxx -t takenote:mytag .
docker run -p CLIENT_ID=xxx CLIENT_SECRET=xxxx NODE_ENV=development 5000:5000 takenote:mytag

Go to localhost:5000 to view the app.

Note: You will see some errors during the installation phase, but these are simply warnings that unnecessary packages do not exist, since the Node Alpine base image is minimal.

Seed data

To seed the app with some test data, paste the contents of seed.js into your browser console.

Testing

Run unit and component tests.

npm run test

Run Cypress e2e tests.

npm run e2e:open

Folder Structure

Explanation the structure of files and directories within TakeNote.

β”œβ”€β”€ config/                    # Webpack configuration
β”‚   β”œβ”€β”€ webpack.common.js      # Webpack shared configuration
β”‚   β”œβ”€β”€ webpack.dev.js         # Webpack development configuration (dev server)
β”‚   └── webpack.prod.js        # Webpack productuon configuration (dist output)
β”œβ”€β”€ cypress/                   # End-to-end tests
β”œβ”€β”€ docs/                      # Assets for documentation
β”œβ”€β”€ patches/                   # Overrides for dependencies
β”œβ”€β”€ public/                    # Files that will write to dist on build
β”œβ”€β”€ src/                       # All TakeNote app source files
β”‚   β”œβ”€β”€ client/                # React client side code
β”‚   β”‚   β”œβ”€β”€ api/               # Temporary placeholders for mock API calls
β”‚   β”‚   β”œβ”€β”€ assets/            # Static assets
β”‚   β”‚   β”œβ”€β”€ components/        # React components that are not connected to Redux
β”‚   β”‚   β”œβ”€β”€ constants/         # Static values
β”‚   β”‚   β”œβ”€β”€ contexts/          # React context global state without Redux
β”‚   β”‚   β”œβ”€β”€ helpers/           # Helper functions
β”‚   β”‚   β”œβ”€β”€ router/            # React private and public routes
β”‚   β”‚   β”œβ”€β”€ sagas/             # Redux sagas
β”‚   β”‚   β”œβ”€β”€ selectors/         # Redux Toolkit selectors
β”‚   β”‚   β”œβ”€β”€ slices/            # Redux Toolkit slices
β”‚   β”‚   β”œβ”€β”€ styles/            # Sass style files
β”‚   β”‚   β”œβ”€β”€ tests/             # React Testing Library component tests
β”‚   β”‚   └── types              # TypeScript types
β”‚   β”‚   └── index.tsx          # Client side entry point
β”‚   └── server/                # Node/Express server side code
β”‚       β”œβ”€β”€ handlers/          # Functions for API endpoints
β”‚       β”œβ”€β”€ middleware/        # Middleware for API endpoints
β”‚       β”œβ”€β”€ router/            # Route API endpoints
β”‚       β”œβ”€β”€ utils/             # Backend utilities
β”‚       └── index.ts           # Server entrypoint
β”œβ”€β”€ .editorconfig              # Configures editor rules
β”œβ”€β”€ .gitattributes             # Additional git attributes
β”œβ”€β”€ .gitignore                 # Lists files for git to ignore
β”œβ”€β”€ .prettierrc                # Code convention enforced by Prettier
β”œβ”€β”€ .travis.yml                # Continuous integration and deployment config
β”œβ”€β”€ CHANGELOG.md               # List of significant changes
β”œβ”€β”€ cypress.json               # Cypress configuration
β”œβ”€β”€ deploy.sh                  # Deployment script for Docker in production
β”œβ”€β”€ Dockerfile                 # Docker build instructions
β”œβ”€β”€ jest.config.js             # Jest configuration
β”œβ”€β”€ LICENSE                    # License for this open source project
β”œβ”€β”€ nodemon.json               # Nodemon configuration
β”œβ”€β”€ package-lock.json          # Package lockfile
β”œβ”€β”€ package.json               # Dependencies and additional information
β”œβ”€β”€ README.md
β”œβ”€β”€ seed.js                    # Seed the app with data for testing
β”œβ”€β”€ tsconfig.json              # Typescript configuration
└── tsconfig.test.json         # Typescript test configuration

Technologies

TakeNote is possible thanks the all these open source languages, libraries, and frameworks.

Tech Description
Codemirror Browser-based text editor
TypeScript Static type-checking programming language
Node.js JavaScript runtime for the backend
Express Server framework
React Front end user interface
Redux Global state management
Webpack Asset bundler
Sass Style preprocessor
OAuth Protocol for secure authorization
ESLint TypeScript linting
Jest Unit testing framework
Cypress End-to-end testing framework

Contributing

TakeNote is an open source project, and contributions of any kind are welcome! Open issues, bugs, and enhancements are all listed on the issues tab and labeled accordingly. Feel free to open bug tickets and make feature requests. Easy bugs and features will be tagged with the good first issue label.

The project is written in TypeScript, React and Redux. TypeScript is set to strict mode, with no implicit any allowed. The formatting style for the project is set by Prettier.

Style notes

  • Use non-default exports for components
  • Imports are ordered and separated by built-in modules -> external modules -> internal modules -> css/assets/other

Contributors

Thanks goes to these wonderful people:


Tania Rascia

πŸ’» πŸ€” πŸ›

hankolsen

πŸ’» πŸ› ⚠️

Joseph Perez

πŸ’»

Paul

πŸ’» ⚠️

Martin Rosenberg

πŸ’» πŸ› 🚧

Melissa

πŸ’»

Jason Towle

πŸ’»

Mark Erikson

πŸ€”

Alphonse Bouy

πŸ›

dave2kb

🎨 πŸ€”

Devin McIntyre

πŸ’»

Jeffrey Fisher

πŸ›

Alex Dong

πŸ’»

Publicker

πŸ’»

Jakub NaskrΔ™ski

πŸ’» πŸ› ⚠️

Benny O

πŸ’»

Justin Payne

πŸ’»

marshmallow

🚧

Jose Felix

πŸ’»

Nikolay Kirsh

πŸ’»

Mudassar Ali

πŸ’»

Nathan Bland

πŸ› πŸ’»

Craig Lam

πŸ’» πŸ› ⚠️

Ashinze Ekene

πŸ› πŸ’»

Harry Sullivan

πŸ’»

Mauricio MartΓ­nez

πŸ’»

Black-Hole

πŸ’»

Frank Blendinger

πŸ’»

Eduardo Reveles

πŸ’»

Leo Royzengurt

πŸ’» πŸ›

kcvgan

πŸ’» πŸ›

Cody Towstik

πŸ’» ⚠️ πŸ›

Vincent DΓΆrig

⚠️ πŸ’»

Michael Huynh

πŸ’» πŸ›

Acknowledgements

Author

License

This project is open source and available under the MIT License.

About

πŸ“ A web-based note-taking app with GitHub sync and Markdown support. (WIP)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • TypeScript 71.1%
  • CSS 20.1%
  • JavaScript 7.3%
  • Other 1.5%