Back

My Note

Personal notes for everyday thinking

  • react.js
  • typescript
  • go
  • postgres

Overviewh2

My Note is a personal notes app for writing and organizing everyday thoughts. Notes are written in a rich text editor, grouped with folders and labels, and can be nested as sub-notes. AI help is available right inside the editor.

Featuresh2

  • Rich text editor built on Tiptap, with slash commands, a drag handle to move blocks, tables, images, and code blocks with their own toolbar.
  • Sub-notes let any note have child notes, nested as deep as needed. A note shows how many children it has, a breadcrumb jumps back to the parent, and a note can be moved under another one at any time. Children follow the folder, archive, and secret state of their parent, and moves that would create a cycle are rejected.
  • Task lists inside notes, so to-dos live next to regular text.
  • Link cards that turn a URL into a preview card.
  • Folders and labels to group notes, with search and filters on the home screen.
  • AI bubble menu to ask AI about the selected text, with a per-user usage limit.
  • Guest mode to try the app without signing up, and upgrade the account anytime.
  • Feedback sent straight from the app.

Tech stackh2

Frontend

  • React 19 and TypeScript, built with Vite.
  • Tiptap for the editor, dnd-kit for drag and drop.
  • TanStack Query for data fetching and Jotai for light state.
  • Tailwind CSS 4 and shadcn/ui for the UI.

Backend

  • Go with Gin as the HTTP framework.
  • PostgreSQL through GORM, with migrations by golang-migrate.
  • JWT for authentication.
  • Image uploads handled by the backend itself and served from its /uploads folder.
  • OpenRouter as the model provider for AI features.

Infra

  • Frontend and backend are both packed with Docker, and the frontend is served by Nginx.
  • Automatic deploys through GitHub Actions in each repo.

Backend structureh2

The backend is split by module in internal/modules (ai, folders, labels, feedback, and so on). Each module has its own handler, service, dto, and routes files, so adding a feature means adding one folder without touching other modules.