https://github.com/mrlemoos/nota.app
Think clearly. Write slowly.
https://github.com/mrlemoos/nota.app
markdown note notes notes-app nx react react-router vite
Last synced: 2 months ago
JSON representation
Think clearly. Write slowly.
- Host: GitHub
- URL: https://github.com/mrlemoos/nota.app
- Owner: mrlemoos
- License: apache-2.0
- Created: 2026-03-26T06:26:23.000Z (3 months ago)
- Default Branch: main
- Last Pushed: 2026-04-22T07:09:10.000Z (2 months ago)
- Last Synced: 2026-04-22T08:17:54.869Z (2 months ago)
- Topics: markdown, note, notes, notes-app, nx, react, react-router, vite
- Language: TypeScript
- Homepage: https://nota.mrlemoos.dev
- Size: 9.29 MB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Agents: AGENTS.md
Awesome Lists containing this project
README
Nota

## Philosophy
You know the feeling: you open something to think, and the software starts performing (offering, suggesting, nudging) until the room for your own pace shrinks. Useful automation has its place elsewhere; in a notes app, that itch to always *do something next* can mistake motion for thinking.
[Nota](https://nota.mrlemoos.dev) treats your attention as something to **protect**, not to harvest. It gives you a steady place to write and arrange ideas, and it steps back when you pause so your mind can do the unglamorous part: wandering, revising, waiting for the right phrase without the product trying to entertain the lull.
We leave silence alone on purpose. Boredom at the cursor is the sound of a thought catching up.
## What it is

Nota is a personal notes app built as an [Nx](https://nx.dev) monorepo.
The main client ([apps/nota.app](apps/nota.app)) is a **Vite** single-page app with **React 19**; in-app navigation uses the location **hash** (see `app/lib/app-navigation.ts`).
Notes use **Supabase** (Postgres, Storage, and row-level security) with **Clerk** for sign-in (third-party JWTs). The editor is **TipTap** (ProseMirror).
Subscriptions use **Clerk Billing** (checkout in the SPA; server-side entitlement checks on Vercel `api/*` or optional **[nota-server](apps/nota-server)**).
An **Electron** desktop shell wraps the same build—see [apps/nota-electron/README.md](apps/nota-electron/README.md). The public marketing site lives in [apps/nota-marketing](apps/nota-marketing) (Astro).
## Requirements
- **Node.js** 22 or newer (see root `package.json` `engines`)
- **pnpm** 10.x (see root **`packageManager`** in [`package.json`](package.json); [`pnpm-workspace.yaml`](pnpm-workspace.yaml) lists workspace packages)
## Install
From the repository root:
```sh
corepack enable pnpm
pnpm install
```
## Environment
Copy [apps/nota.app/.env.example](apps/nota.app/.env.example) to `apps/nota.app/.env` and set at least:
- `VITE_SUPABASE_URL` — your Supabase project URL
- `VITE_SUPABASE_ANON_KEY` — your Supabase anon (public) key
For Clerk sign-in and subscription flows, follow the same file for `VITE_CLERK_PUBLISHABLE_KEY`, optional `VITE_NOTA_SERVER_API_URL`, and **server-only** secrets (`CLERK_SECRET_KEY`, etc.—never commit real values). Schema, RLS policies, and migrations are applied in Supabase from the SQL in this repo—environment variables alone do not create the database.
## Database
SQL migrations live under [supabase/migrations/](supabase/migrations/) at the repository root. If you use the [Supabase CLI](https://supabase.com/docs/guides/cli), link your project and apply migrations with your usual workflow (for example `supabase db push` against a linked project, or local `supabase start` for development).
## Run the web app
```sh
pnpm exec nx dev @nota.app/nota.app
```
(`pnpm exec nx dev nota.app` resolves to the same project.)
The Vite dev server listens on **[http://localhost:4200](http://localhost:4200)**.
## Marketing site (local)
```sh
pnpm exec nx run @nota.app/nota-marketing:dev
```
## Optional API server
For Nota Pro entitlement and related routes outside Vercel serverless, run [nota-server](apps/nota-server) and point the SPA at it with `VITE_NOTA_SERVER_API_URL`. See [apps/nota-server/README.md](apps/nota-server/README.md).
## Build and test
```sh
pnpm exec nx build @nota.app/nota.app
pnpm exec nx test @nota.app/nota.app
```
Tests use **Vitest** via the Nx Vitest plugin.
## Electron
The desktop app expects the web dev server at `http://localhost:4200`. From the repository root you can run:
- `pnpm run electron:dev` — Electron only (start the web app in another terminal with `pnpm exec nx dev @nota.app/nota.app`, or run `pnpm exec nx run-many -t dev` to start Vite and Electron together)
More detail: [apps/nota-electron/README.md](apps/nota-electron/README.md).
## Repository layout
| Path | Purpose |
| ---------------------- | ---------------------------------------------------- |
| `apps/nota.app/` | Main Vite SPA (notes, auth, TipTap) |
| `apps/nota-electron/` | Electron shell |
| `apps/nota-server/` | Optional Node API (entitlement, shared server logic) |
| `apps/nota-marketing/` | Astro marketing site |
| `supabase/` | Supabase config and SQL migrations |
| `assets/` | Shared assets (e.g. screenshots for docs) |
## Licence
Apache License 2.0 — see [LICENSE](LICENSE) and [package.json](package.json).