A modern, web-based note-taking application with powerful import capabilities, rich markdown editing, and offline-first architecture.
- Dual-Mode Editor: CodeMirror-powered rich editor with automatic fallback to plain textarea
- Live Markdown Preview: Real-time rendering with syntax highlighting
- Drawing Pad: Built-in canvas for sketches and diagrams
- Offline-First: IndexedDB storage for seamless offline access
- Quick Switcher: Fast navigation between notes with
Ctrl/Cmd+P
- PDF Import: Extract text and images from PDF documents
- PowerPoint (PPTX) Support: Convert presentations to markdown notes
- OCR Processing: Extract text from scanned documents
- Flexible Import Modes:
- Single note (all content combined)
- One note per page/slide
- Slides mode (with
---separators)
- BullMQ Job Queue: Asynchronous processing for large imports
- Python Worker: Dedicated microservice for PPTX parsing
- Progress Tracking: Real-time job status monitoring
- Backlinks: Automatic bidirectional linking between notes
- Search: Full-text search across all notes with tag support
- Auto-Save: Never lose your work with intelligent debounced saving
- Export: Download notes as Markdown files
- Email/password authentication
- Google OAuth integration
- Google Drive sync capabilities
- Node.js 16.0.0 or higher
- Redis 6.0 or higher
- PostgreSQL 12 or higher
- Python 3.8 or higher (for PPTX import)
-
Clone the repository
git clone https://github.com/FX-at-Dev/Notefy.git cd Notefy -
Set up the Backend
cd Backend npm install -
Set up the Python Worker
cd Backend/python-worker pip install -r requirements.txt -
Configure Environment Variables
Create a
.envfile in theBackenddirectory:# Database DATABASE_URL=postgresql://user:password@localhost:5432/notefy # Redis REDIS_URL=redis://127.0.0.1:6379 # Authentication JWT_SECRET=your-secret-key-here # Python Worker PYTHON_WORKER_URL=http://localhost:8000 # OAuth (optional) GOOGLE_CLIENT_ID=your-google-client-id GOOGLE_CLIENT_SECRET=your-google-client-secret
-
Set up the Database
cd Backend npm run migrate -
Start Redis
redis-server
You'll need three terminal sessions:
Terminal 1 - Backend API Server:
cd Backend
npm run devThe API server will run on http://localhost:4000
Terminal 2 - Python Worker:
cd Backend/python-worker
uvicorn main:app --port 8000The Python worker will run on http://localhost:8000
Terminal 3 - Import Worker:
cd Backend
npm run workerFrontend:
Open Frontend/index.html in your browser, or use a local server:
cd Frontend
npx serve .Visit http://localhost:3000 (or the port shown)
For a quick test without full setup:
-
Start only the backend server:
cd Backend npm start -
Open
Frontend/editor.htmldirectly in your browser -
Click "Continue offline" to use local storage mode
- Click New to create a fresh note
- Type your content in Markdown format
- Changes auto-save after 900ms of inactivity
- Press
Ctrl/Cmd+Sto force an immediate save
- Click Import in the toolbar
- Select a PDF or PPTX file
- Choose import mode:
- Single note: Combines all content
- Pages: Creates separate notes per page/slide
- Slides: Uses
---separator between slides
- Enable OCR for scanned documents
- Click Start Import
- Click Draw to open the drawing pad
- Adjust brush size with the slider
- Draw using mouse/touch
- Click Save to download as PNG
- Click Clear to reset the canvas
- Press
Ctrl/Cmd+Pto open Quick Switcher - Type to search across note titles and content
- Click a result to open that note
- Click Export to download the current note as a
.mdfile
- Vanilla JavaScript with ES6 modules
- CodeMirror 6 for rich text editing
- IndexedDB via Dexie.js for offline storage
- markdown-it for preview rendering
- Fastify - Fast, low-overhead web framework
- BullMQ - Redis-based queue for background jobs
- PostgreSQL - Primary data store
- IORedis - Redis client for job queues
- FastAPI - Modern Python web framework
- python-pptx - PowerPoint parsing library
- uvicorn - ASGI server
Notefy/
βββ Backend/
β βββ server.js # Main API server
β βββ config/ # Configuration modules
β βββ controllers/ # Request handlers
β βββ jobs/ # Background workers
β βββ middlewares/ # Express/Fastify middleware
β βββ migrations/ # Database schemas
β βββ models/ # Data models
β βββ routes/ # API routes
β βββ services/ # Business logic
β βββ python-worker/ # PPTX parsing microservice
β βββ tests/ # Test suites
βββ Frontend/
βββ index.html # Login page
βββ editor.html # Main editor
βββ import.html # Import interface
βββ css/ # Stylesheets
βββ js/ # Frontend modules
Run the test suite:
cd Backend
npm testTests cover:
- Authentication flows
- Note CRUD operations
- Import processing
- Search functionality
- Drive sync
cd Backend
npm run dev # Uses nodemon for auto-restartCreate a new migration:
# Add a new .sql file in Backend/migrations/
# e.g., 007_add_feature.sqlRun migrations:
npm run migrate- Add parser logic in
Backend/jobs/importWorker.js - Update Python worker if needed in
Backend/python-worker/main.py - Add file type to
Frontend/import.htmlaccept attribute
{
"email": "user@example.com",
"password": "password123"
}Response: { "token": "jwt-token" }
Initiates Google OAuth flow
Headers: Authorization: Bearer <token>
Response: Array of note objects
Content-Type: multipart/form-data
Fields:
file: PDF or PPTX fileocr: "true" or "false"mode: "single" | "pages" | "slides"
Response: { "jobId": "123", "status": "queued" }
Response:
{
"jobId": "123",
"status": "completed",
"progress": 100,
"result": { "createdNotes": ["note-id-1"], "notes": [...] }
}We welcome contributions! Here's how you can help:
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Commit your changes
git commit -m 'Add amazing feature' - Push to your branch
git push origin feature/amazing-feature
- Open a Pull Request
- Write meaningful commit messages
- Add tests for new features
- Update documentation as needed
- Follow existing code style
- Keep PRs focused and atomic
- Full Google Drive bidirectional sync
- Collaborative editing (real-time multiplayer)
- Mobile app (React Native)
- End-to-end encryption
- Plugin system for custom import/export formats
- Advanced search with filters and operators
- Note templates
- Kanban board view
- Web clipper browser extension
- Google OAuth is currently a stub implementation
- Some database models are empty (migrations needed)
- Search functionality requires full implementation
- Drive sync is partially implemented
This project is licensed under the MIT License - see the LICENSE file for details.
- FX-at-Dev - GitHub Profile
- CodeMirror - Versatile text editor
- Fastify - Fast web framework
- BullMQ - Premium job queue
- Dexie.js - IndexedDB wrapper
- python-pptx - PowerPoint parsing
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Documentation: Wiki
Made with β€οΈ by the Notefy team