> This project is in a transition state between Javascript & Typescript. We are gradually porting everything over to Typescript, so if you can help with that, it'd be great!
1.`src/`: 99% of the source code lives here & this is also where you'll spend most of your time.
1.`index.tsx`: **the app entry point** responsible for loading the appropriate view based on the current route.
2.`app.js`: **the default route** that contains the whole note-taking experience (notes list, navigation, editor, etc.)
3.`views/`: Contains **all the views**, including views for login, settings, notes, notebooks & topics.
4.`components/`: All the **reusable UI components** are here (e.g., button, editor, etc.)
5.`stores/`: Contains the glue code & **logic for all the UI interactions**. For example, when you pin a note, the `src/stores/note-store.js` is responsible for everything, including refreshing the list to reflect the changes.
6.`navigation/`: All the **routing & navigation** logic lives here. The app uses two kinds of routers:
1.`routes.js`: This contains all the main routes like `/notes`, `/notebooks` with information on what to render when the user goes to a particular route.
2.`hash-routes.js`: The hash routes are used for temporary navigation, like opening dialogs or opening a note. These look like `#/notes/6307bbd65d5d5d5cb86f6f74/edit`.
7.`interfaces/`: This is where the **platform-specific storage & encryption logic** lives. These interface implementations are used by the `@notesnook/core` to provide capabilities such as persistence & encryption.
8.`hooks/`: Contains all the **general-purpose React hooks**
9.`utils/`: These are **general-purpose utilities** for performing various tasks such as downloading files, storing configuration, etc.
10.`common/`: This directory contains **the shared logic between the whole app**. For example, this is where the database is instantiated for use throughout the app.
When you are done making the required changes, you need to run the tests. We use Playwright as the testing framework. The tests can be started with a single command: