Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

57 Commits

Repository files navigation

SimpliNotes

A clean, distraction free markdown notebook. One page in front of you, every keystroke saved on its own, in light or dark.

Built on the MERN stack (MongoDB, Express, React, Node).

Features

Writing

  • Markdown editing that reads as you type (headings, lists, quotes, code, checklists, links)
  • Quick formatting bubble menu for bold, italic, strikethrough, inline code, and links
  • Autosave on every keystroke, no save button to find
  • Live word and character count with a saving indicator

Notes

  • Create, rename, and delete notes
  • Instant search across titles and content
  • Notes sorted by most recently updated
  • Each account sees only its own notes

Account

  • Sign up and log in
  • Profile photo upload (stored on Cloudinary)
  • Update username and email
  • Change password
  • Sign out

Sessions

  • JWT access and refresh tokens kept in httpOnly cookies
  • Stays logged in across browser restarts
  • Silent session renewal in the background

Experience

  • Light and dark themes
  • Responsive layout with a slide in sidebar on mobile

Tech stack

Frontend

  • React 19 with Vite
  • React Router
  • Zustand for state
  • Tailwind CSS v4
  • Tiptap editor with markdown
  • lucide-react icons

Backend

  • Node and Express 5
  • MongoDB with Mongoose
  • JWT and bcryptjs for auth
  • Multer and Cloudinary for avatar uploads
  • cookie-parser and CORS

Getting started

You will need Node, a MongoDB connection string, and a Cloudinary account (only if you want avatar uploads).

Backend

cd backend
npm install
cp .env.sample .env # then fill in the values
npm run dev # starts on port 8000

Frontend

cd frontend
npm install
npm run dev # Vite dev server, proxies /api to port 8000

Open the address Vite prints and you are ready to write.

Environment variables

Set these in backend/.env (see backend/.env.sample):

VariablePurpose
MONGODB_URIMongoDB connection string
PORTBackend port (defaults to 8000)
ACCESS_TOKEN_SECRETSecret for short lived access tokens
REFRESH_TOKEN_SECRETSecret for refresh tokens
CLOUDINARY_CLOUD_NAMECloudinary account name
CLOUDINARY_API_KEYCloudinary API key
CLOUDINARY_API_SECRETCloudinary API secret
CLIENT_URLAllowed frontend origin(s) for CORS, comma separated

Project structure

backend/ Express API, MongoDB models, auth, notes
frontend/ React app, editor, pages, state

About

A MERN project

Resources

Stars

4 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages