Skip to content

n4itr0-07/ZenMark

Repository files navigation

✨ ZenMark

A Lightweight Browser-Based Markdown Note-Taking App

No servers. No sign-ups. Just open and write.

Deploy to GitHub Pages Docker Build License: MIT

πŸ“± Installable PWA β€’ πŸͺΆ Lightweight β€’ πŸ“΄ Works Offline β€’ πŸ”’ Privacy-First

Your notes never leave your browser. ZenMark stores everything locally in IndexedDB. Once loaded, it works even if you turn off your internet!


πŸ—ΊοΈ How ZenMark Works

flowchart TD
    subgraph User["πŸ‘€ User"]
        A[Open ZenMark]
    end
    
    subgraph App["🌐 Browser App"]
        B[React App Loads]
        C{First Visit?}
        D[Service Worker Installs]
        E[Load from Cache]
    end
    
    subgraph Features["✨ Features"]
        F[πŸ“ Create/Edit Notes]
        G[πŸ“‹ Use Templates]
        H[πŸ” Search Notes]
        I[πŸ“Œ Pin Important]
        J[πŸŒ“ Toggle Theme]
    end
    
    subgraph Storage["πŸ’Ύ Local Storage"]
        K[(IndexedDB)]
        L[Auto-Save]
    end
    
    subgraph Export["πŸ“€ Export Options"]
        M[Download .md]
        N[Backup JSON]
        O[Print Note]
    end
    
    A --> B
    B --> C
    C -->|Yes| D
    C -->|No| E
    D --> F
    E --> F
    F --> L
    L --> K
    F --> G
    F --> H
    F --> I
    F --> J
    F --> M
    F --> N
    F --> O
    
    style A fill:#3b82f6,color:#fff
    style K fill:#22c55e,color:#fff
    style D fill:#f59e0b,color:#fff
Loading

πŸš€ Features

Feature Description
πŸ“ Full Markdown Support Headers, lists, tables, code blocks, and more
πŸ‘οΈ Live Preview Real-time rendering with split view
πŸ”— Secure Sharing Share notes via end-to-end encrypted links
πŸ”’ E2E Encrypted Shared notes encrypted in browser, only link holders can read
🎨 Syntax Highlighting 60+ languages with copy button
πŸ“Œ Pin Notes Keep important notes at the top
πŸŒ“ Light & Dark Themes Toggle with Alt+T
πŸ“‹ Note Templates 6 templates: blank, meeting, todo, journal, project, code
⏱️ Reading Time Estimated reading time based on word count
πŸ“„ Duplicate Notes Create copies of existing notes
🎯 Focus Mode Distraction-free writing (hide sidebar)
πŸ–¨οΈ Print Notes Print formatted markdown
⌨️ Keyboard Shortcuts Ctrl+S save, Alt+N new note, Ctrl+B bold
πŸ“₯ Import Files Import .md and .txt files
πŸ“€ Export & Backup Download notes or backup all as JSON
πŸ’Ύ Local Storage All data stored in IndexedDB - no server needed
πŸ“± PWA Support Install as app on mobile/desktop

πŸ–₯️ Demo

Live Demo: https://zenmark.site

⌨️ Keyboard Shortcuts

Shortcut Action
Ctrl + S Save note
Alt + N Create new note
Alt + T Toggle light/dark theme
Ctrl + B Bold text
Ctrl + I Italic text
Ctrl + K Insert link
Ctrl + `` Inline code
Ctrl + Shift + C Code block
Ctrl + Shift + S Strikethrough
Ctrl + H ## Heading
Ctrl + Shift + Q > Blockquote
Ctrl + Shift + L - List item

πŸ“‹ Note Templates

flowchart LR
    A[Click + Button] --> B{Select Template}
    B --> C[πŸ“„ Blank Note]
    B --> D[πŸ“‹ Meeting Notes]
    B --> E[βœ… To-Do List]
    B --> F[πŸ““ Daily Journal]
    B --> G[πŸš€ Project Doc]
    B --> H[πŸ’» Code Snippet]
    
    style A fill:#3b82f6,color:#fff
    style C fill:#6366f1,color:#fff
    style D fill:#8b5cf6,color:#fff
    style E fill:#a855f7,color:#fff
    style F fill:#d946ef,color:#fff
    style G fill:#ec4899,color:#fff
    style H fill:#f43f5e,color:#fff
Loading

οΏ½ Secure Sharing

Share notes with anyone via encrypted links. Your note content is encrypted in your browser before being stored, and only the link holder can decrypt it.

flowchart LR
    A[Click Share] --> B[Encrypt in Browser]
    B --> C[Upload Encrypted]
    C --> D[Get Short Link]
    D --> E[Share Link]
    E --> F[Recipient Opens]
    F --> G[Decrypt in Browser]
    G --> H[Read Note]
    
    style A fill:#3b82f6,color:#fff
    style B fill:#22c55e,color:#fff
    style G fill:#22c55e,color:#fff
    style H fill:#8b5cf6,color:#fff
Loading

How it works:

  • πŸ”’ AES-256-GCM encryption β€” Military-grade encryption
  • πŸ”‘ Key in URL fragment β€” Decryption key never sent to any server
  • ⏰ Expiration options β€” 5 min to never
  • πŸ‘οΈ Read-only β€” Recipients can view, download, or save to their notes

οΏ½πŸ› οΈ Tech Stack

flowchart LR
    subgraph Frontend
        A[React 19] --> B[Vite]
    end
    
    subgraph Styling
        C[Vanilla CSS] --> D[Light/Dark Themes]
    end
    
    subgraph Markdown
        E[react-markdown] --> F[remark-gfm]
        F --> G[Prism Syntax]
    end
    
    subgraph Storage
        H[IndexedDB] --> I[idb library]
    end
    
    subgraph PWA
        J[vite-plugin-pwa] --> K[Service Worker]
    end
Loading
  • Frontend: React 19 + Vite
  • Styling: Vanilla CSS with light/dark themes
  • Markdown: react-markdown + remark-gfm
  • Code Highlighting: react-syntax-highlighter (Prism)
  • Storage: IndexedDB (via idb)
  • PWA: vite-plugin-pwa
  • Icons: lucide-react

πŸ“¦ Installation

Quick Start (npm)

# Clone the repository
git clone https://github.com/n4itr0-07/ZenMark.git
cd ZenMark

# Install dependencies
npm install

# Start development server
npm run dev

🐳 Docker

# Build the image
docker build -t zenmark .

# Run the container
docker run -d -p 8080:80 zenmark

# Open http://localhost:8080

Docker Compose

# Start the application
docker-compose up -d

# Stop the application
docker-compose down

# Rebuild and start
docker-compose up -d --build

πŸ“‚ Project Structure

ZenMark/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/     # React components
β”‚   β”‚   β”œβ”€β”€ Editor.jsx      # Main editor with preview
β”‚   β”‚   β”œβ”€β”€ Sidebar.jsx     # Notes list & navigation
β”‚   β”‚   β”œβ”€β”€ AboutPage.jsx   # About page
β”‚   β”‚   └── Modal.jsx       # Reusable modal
β”‚   β”œβ”€β”€ lib/
β”‚   β”‚   └── storage.js      # IndexedDB operations + templates
β”‚   β”œβ”€β”€ styles/             # CSS files
β”‚   β”œβ”€β”€ App.jsx
β”‚   └── main.jsx
β”œβ”€β”€ public/             # Static assets & PWA icons
β”œβ”€β”€ Dockerfile          # Multi-stage Docker build
└── .github/workflows/  # CI/CD pipelines

🀝 Contributing

Contributions are welcome! Here's how you can help:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Commit your changes: git commit -m 'Add amazing feature'
  4. Push to the branch: git push origin feature/amazing-feature
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❀️ by n4itr0-07

⭐ Star this repo if you find it useful!

About

A Lightweight Browser-Based Markdown Note-Taking App

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors