Modular Notes is a desktop note-taking application built around three independently running, file-based services. The main program creates and displays notes; dedicated services handle editing, listing/search, and deletion.
The project began as an Oregon State University CS 361 course project in Summer 2025. This repository is a transparent portfolio restoration: it preserves the original product and service design while rebuilding missing source into a reproducible, tested package.
- Tkinter desktop interface with create, edit, search, sort, and delete workflows
- Three separate service processes for editing, listing, and deletion
- JSON request/response communication through service-specific file queues
- Atomic writes and cross-process locking to protect shared note data
- Pagination and multi-select bulk deletion
- Service timeouts and graceful behavior when an optional dependency is offline
- No runtime packages outside the Python standard library
- Automated unit and cross-process integration tests
flowchart LR
App[Desktop main program]
Edit[Edit service]
List[List service]
Delete[Delete service]
Store[(notes.json)]
Quote[Optional quote API]
App <-->|JSON files| Edit
App <-->|JSON files| List
App <-->|JSON files| Delete
Edit --> Store
List --> Store
Delete --> Store
App -.->|GET /quote| Quote
The application writes a uniquely identified request into .runtime/requests/<service>/. The service processes it and writes the matching response into .runtime/responses/<service>/. See the architecture document for the protocol and example payloads.
Python 3.10 or newer is required.
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
modular-notesThe launcher starts all three service processes and stops them when the desktop application closes. Notes are stored locally in data/notes.json; generated data and runtime messages are ignored by Git.
During the original course project, GitHub user playmakerdaniel supplied a motivational quote service for this main program. Their source is not included here.
If a compatible service is running at http://127.0.0.1:5000/quote, Modular Notes displays its response. A different endpoint can be configured with:
export QUOTE_SERVICE_URL="http://127.0.0.1:5000/quote"
modular-notesIf the service is unavailable, all note functionality continues to work.
The test suite uses only the standard library:
PYTHONPATH=src python -m unittest discover -s tests -vThe tests cover storage persistence, validation, search, sorting, pagination, edit/list/delete service communication, bulk deletion, and the optional HTTP client.
The original Sprint 3 plan defined Edit Note, Note List, and Delete Note services using file-based communication. The Canvas milestone was submitted on August 13, 2025 and received 100/100.
The original final source directory is no longer available, so this code is not presented as a byte-for-byte copy of the submission. The recovery and refactoring boundary is documented in coursework provenance.
For a source-by-source account of the surviving evidence, see the recovery manifest.
Feifan Qi authored the Modular Notes main program and this restored portfolio implementation. The external quote service is credited above and remains in its author's repository. Feifan also developed a separate permission REST service for another student's main program during the same course; it is intentionally kept separate from Modular Notes.