NoteStack – Full-Stack Notes App

A self-hosted note-taking application with notebooks, tags, search, and autosave.

NoteStack is a full-stack notes application built with Node.js, Express, EJS, and MariaDB. It allows users to create accounts, organize notes into notebooks, tag notes for filtering, search across title/content/tags, and edit notes with autosave functionality.

The application is hosted on a Synology NAS, managed with PM2, and securely exposed to the internet through Cloudflare Tunnel without opening inbound router ports.

Project Overview

Core application features:

  • User Authentication — signup, login, logout, password hashing, and session-based access control.
  • Notebook Organization — users can create and manage separate notebooks for different topics.
  • Note Management — create, edit, autosave, and delete notes inside notebooks.
  • Tagging System — assign tags to notes, edit tags later, and click tags to filter results.
  • Search — search notes by title, content, and tags.

Tech Stack

Node.js, Express, EJS, MariaDB, PM2, Cloudflare Tunnel, Synology NAS

Key Features

Authentication

Built a secure login flow using bcrypt password hashing and express-session for authenticated access to notebooks and notes.

Notebook & Note CRUD

Users can create, view, edit, and delete notebooks and notes, giving the app a complete and practical CRUD workflow.

Tagging & Search

Notes support many-to-many tag relationships, and search includes note title, note content, and assigned tags.

Autosave

Notes automatically save while typing, creating a more modern and user-friendly editing experience.

Application Screenshots

Click an image to view it larger.

Database Schema

Schema diagram for the NoteStack database structure.

Deployment & Security

  • Hosted on a self-managed Synology NAS.
  • MariaDB runs internally and is not exposed to the public internet.
  • PM2 keeps the application running persistently after terminal sessions close.
  • Cloudflare Tunnel provides secure HTTPS access without opening inbound ports.
  • Authentication uses bcrypt for password hashing and express-session for session management.

What I Learned

  • Designing a notes application around one-to-many and many-to-many database relationships.
  • Building authentication and session-based access control into a full-stack app.
  • Implementing tag-aware search and autosave behavior for a more realistic user experience.
  • Deploying and managing a self-hosted application on Synology with PM2 and Cloudflare Tunnel.