A web-based notes app for developers. (Demo only)
{{uuid}}
syntax to link to notes within other notesTakeNote is a note-taking app for the web. You can use the demo app at takenote.dev. It is a static site without a database and does not sync your notes to the cloud. The notes are persisted temporarily in local storage, but you can download all notes in markdown format as a zip.
Hidden within the code is an alternate version that contain a Node/Express server and integration with GitHub. This version involves creating an OAuth application for GitHub and signing up to it with private repository permissions. Instead of backing up to local storage, your notes will back up to a private repository in your account called takenote-data
. Due to the following reasons I'm choosing not to deploy or maintain this portion of the application:
However, I'm leaving the code available so you can feel free to host your own TakeNote instance or study the code for learning purposes. I do not provide support or guidance for these purposes.
TakeNote was created with TypeScript, React, Redux, Node, Express, Codemirror, Webpack, Jest, Cypress, Feather Icons, ESLint, and Mousetrap, among other awesome open-source software.
"I think the lack of extra crap is a feature." β Craig Lam
Clone and install.
git clone git@github.com:taniarascia/takenote
cd takenote
npm i
Run a development server.
npm run client
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.
http://localhost:3000
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. Remove DEMO
variable to enable GitHub integration.
CLIENT_ID=xxx
CLIENT_SECRET=xxxx
DEMO=true
Change the URLs to port
5000
in production mode or Docker.
git clone git@github.com:taniarascia/takenote
cd takenote
npm i
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 frontend. 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.
In the production environment, 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.
Follow these instructions to build an image and run a container.
# Build Docker image
docker build --build-arg CLIENT_ID=xxx -t takenote:mytag .
# Run Docker container in port 5000
docker run \
-e CLIENT_ID=xxx \
-e CLIENT_SECRET=xxxx \
-e NODE_ENV=development \
-p 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.
To seed the app with some test data, paste the contents of seed.js
into your browser console.
Run unit and component/integration tests.
npm run test
If using Jest Runner in VSCode, add
"jestrunner.configPath": "config/jest.config.js"
to your settings
Run Cypress end-to-end tests.
# In one window, run the application
npm run client
# In another window, run the end-to-end tests
npm run test:e2e:open
TakeNote is an open source project, and contributions of any kind are welcome and appreciated. Open issues, bugs, and feature requests 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.
View CONTRIBUTING.md to learn about the style guide, folder structure, scripts, and how to contribute.
Thanks goes to these wonderful people:
This project is open source and available under the MIT License.