From f577be522114a4a9ed72870beb73b8ecdcbced11 Mon Sep 17 00:00:00 2001 From: KRISHNPRIY2820 <138807694+KRISHNPRIY2820@users.noreply.github.com> Date: Mon, 30 Mar 2026 04:40:53 +0530 Subject: [PATCH] Add MVP implementation --- MVP_README.md | 151 ++++ app.py | 55 ++ frontend/main.js | 12 + frontend/package-lock.json | 802 +++++++++++++++++++ frontend/package.json | 16 + logic/__pycache__/context.cpython-312.pyc | Bin 0 -> 1828 bytes logic/__pycache__/linking.cpython-312.pyc | Bin 0 -> 362 bytes logic/__pycache__/notes.cpython-312.pyc | Bin 0 -> 565 bytes logic/__pycache__/qa.cpython-312.pyc | Bin 0 -> 1358 bytes logic/__pycache__/summarizer.cpython-312.pyc | Bin 0 -> 1367 bytes logic/context.py | 33 + logic/linking.py | 4 + logic/notes.py | 10 + logic/qa.py | 43 + logic/summarizer.py | 35 + requirements.txt | Bin 0 -> 1556 bytes static/images/aossie-logo.svg | 24 + static/images/logo-full.svg | 9 + static/images/logo-icon.svg | 9 + static/images/stability.svg | 14 + static/style.css | 121 +++ templates/index.html | 89 ++ 22 files changed, 1427 insertions(+) create mode 100644 MVP_README.md create mode 100644 app.py create mode 100644 frontend/main.js create mode 100644 frontend/package-lock.json create mode 100644 frontend/package.json create mode 100644 logic/__pycache__/context.cpython-312.pyc create mode 100644 logic/__pycache__/linking.cpython-312.pyc create mode 100644 logic/__pycache__/notes.cpython-312.pyc create mode 100644 logic/__pycache__/qa.cpython-312.pyc create mode 100644 logic/__pycache__/summarizer.cpython-312.pyc create mode 100644 logic/context.py create mode 100644 logic/linking.py create mode 100644 logic/notes.py create mode 100644 logic/qa.py create mode 100644 logic/summarizer.py create mode 100644 requirements.txt create mode 100644 static/images/aossie-logo.svg create mode 100644 static/images/logo-full.svg create mode 100644 static/images/logo-icon.svg create mode 100644 static/images/stability.svg create mode 100644 static/style.css create mode 100644 templates/index.html diff --git a/MVP_README.md b/MVP_README.md new file mode 100644 index 0000000..1b835da --- /dev/null +++ b/MVP_README.md @@ -0,0 +1,151 @@ +# Smart Notes (Local AI Notes App) + +Hi! This project is a small but meaningful attempt to build a local, privacy-first note-taking system with AI features. It is inspired by the Smart Notes idea from AOSSIE for GSoC. + +Instead of relying on cloud services, everything here runs locally on your machine. The idea is simple โ€” your notes are yours, and the intelligence around them should also stay with you. + +--- + +## ๐ŸŒฑ What this project does + +This app lets you: + +* Write and store notes +* Ask questions based on your notes +* Get short summaries of your notes +* See related notes automatically + +All of this is powered by a basic Retrieval-Augmented Generation (RAG) pipeline running locally. + +--- + +## ๐Ÿง  Features + +### 1. Ask Questions (Q&A) + +You can ask questions about your notes, and the system will try to answer using only the content youโ€™ve written. + +### 2. Smart Summarization + +Notes can be summarized into a short, clean sentence instead of just repeating the same text. + +### 3. Related Notes + +When you add a new note, the system suggests other notes that are similar in meaning. + +### 4. Local First + +Everything runs on your system โ€” no mandatory APIs, no cloud dependency. + +### 5. Desktop App + +The app is wrapped using Electron so it can run like a desktop application. + +--- + +## โš™๏ธ Tech Stack + +* Python (Flask) +* HTML + CSS (simple UI) +* HuggingFace Transformers +* Sentence Transformers (for embeddings) +* Electron (for desktop wrapper) + +--- + +## ๐Ÿ—๏ธ How it works (simple view) + +1. Notes are stored locally +2. Each note is converted into embeddings +3. When you ask a question: + + * relevant notes are retrieved + * a model generates an answer from that context + +--- + +## ๐Ÿš€ How to run the project + +### 1. Clone the repo + +``` +git clone https://github.com/KRISHNPRIY2820/smart-notes-mvp.git +cd smart-notes +``` + +### 2. Create virtual environment + +``` +python -m venv venv +venv\Scripts\activate +``` + +### 3. Install requirements + +``` +pip install -r requirements.txt +``` + +### 4. Run the backend + +``` +python app.py +``` + +Open in browser: + +``` +http://127.0.0.1:5000 +``` + +--- + +## ๐Ÿ’ป Run as Desktop App (Electron) + +``` +cd frontend +npm install +npm start +``` + +--- + +## ๐Ÿงช Current limitations + +* UI is basic (focused more on functionality) +* Models are simple and not heavily optimized +* No persistent vector database yet + +--- + +## ๐ŸŒŸ Why this project + +Most note-taking tools today depend heavily on the cloud. This project explores a different direction โ€” keeping everything local while still providing AI assistance. +>This MVP focuses on building a strong local-first foundation, with scalability planned in future iterations. + +--- + +## ๐Ÿšง Future Improvements + +- Multi-page UI instead of a single screen for better feature separation +- Persistent storage so notes are saved locally and do not vanish after restarting the app +- Knowledge graph visualization to explore connections between notes +- Improved retrieval using hybrid search (keyword + semantic) +- Enhanced UI using React + Electron +- Optional multi-device sync while maintaining privacy + +--- + +## ๐Ÿค Contribution + +This is part of my GSoC preparation with AOSSIE. Any feedback or suggestions are genuinely welcome. + +--- + +## ๐Ÿ“œ License + +GNU GPL v3 + +--- + +Thanks for checking this out ๐Ÿ™‚ diff --git a/app.py b/app.py new file mode 100644 index 0000000..af3b4e6 --- /dev/null +++ b/app.py @@ -0,0 +1,55 @@ +from flask import Flask, render_template, request +from logic.notes import add_note, get_notes +from logic.qa import answer +from logic.linking import suggest +from logic.context import update_embeddings +from logic.summarizer import summarize_notes + +app = Flask(__name__) + +@app.route("/", methods=["GET", "POST"]) +def index(): + answer_text = "" + links = [] + summary_text = "" + + # Always get latest notes + notes = get_notes() + + # Ensure embeddings are synced + update_embeddings(notes) + + if request.method == "POST": + + # Add Note + if "note" in request.form and request.form["note"].strip(): + note = request.form["note"].strip() + + add_note(note) + + # Refresh notes + notes = get_notes() + + # Suggest related notes + links = suggest(note, notes) + + # Ask Question + elif "question" in request.form and request.form["question"].strip(): + question = request.form["question"].strip() + + answer_text = answer(question, notes) + + # Summarize Notes + elif "summarize" in request.form: + summary_text = summarize_notes(notes) + + return render_template( + "index.html", + notes=notes, + answer=answer_text, + links=links, + summary=summary_text + ) + +if __name__ == "__main__": + app.run(debug=True) \ No newline at end of file diff --git a/frontend/main.js b/frontend/main.js new file mode 100644 index 0000000..26cf3da --- /dev/null +++ b/frontend/main.js @@ -0,0 +1,12 @@ +const { app, BrowserWindow } = require('electron'); + +function createWindow() { + const win = new BrowserWindow({ + width: 1200, + height: 800, + }); + + win.loadURL('http://127.0.0.1:5000'); +} + +app.whenReady().then(createWindow); \ No newline at end of file diff --git a/frontend/package-lock.json b/frontend/package-lock.json new file mode 100644 index 0000000..1abe24b --- /dev/null +++ b/frontend/package-lock.json @@ -0,0 +1,802 @@ +{ + "name": "frontend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "electron": "^41.1.0" + } + }, + "node_modules/@electron/get": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", + "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "env-paths": "^2.2.0", + "fs-extra": "^8.1.0", + "got": "^11.8.5", + "progress": "^2.0.3", + "semver": "^6.2.0", + "sumchecker": "^3.0.1" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "global-agent": "^3.0.0" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "24.12.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.12.0.tgz", + "integrity": "sha512-GYDxsZi3ChgmckRT9HPU0WEhKLP08ev/Yfcq2AstjrDASOYCSXeyjDsHg4v5t4jOj7cyDX3vmprafKlWIG9MXQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "license": "MIT", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/boolean": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", + "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "license": "MIT", + "optional": true + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "license": "MIT", + "optional": true + }, + "node_modules/electron": { + "version": "41.1.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-41.1.0.tgz", + "integrity": "sha512-0XRFyxRqetmqtkkBvV++wGbHYJ7bD++f6EgJW8y9kX4pPRagwlmKDtzqXZhKiu0DIQppm3sXxzHWK9GYP91OKQ==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@electron/get": "^2.0.0", + "@types/node": "^24.9.0", + "extract-zip": "^2.0.1" + }, + "bin": { + "electron": "cli.js" + }, + "engines": { + "node": ">= 12.20.55" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "license": "MIT", + "optional": true + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "license": "BSD-2-Clause", + "dependencies": { + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + }, + "engines": { + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/global-agent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", + "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "es6-error": "^4.1.1", + "matcher": "^3.0.0", + "roarr": "^2.15.3", + "semver": "^7.3.2", + "serialize-error": "^7.0.1" + }, + "engines": { + "node": ">=10.0" + } + }, + "node_modules/global-agent/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "optional": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "optional": true, + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "optional": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC", + "optional": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/matcher": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", + "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", + "license": "MIT", + "optional": true, + "dependencies": { + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/roarr": { + "version": "2.15.4", + "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", + "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", + "license": "BSD-3-Clause", + "optional": true, + "dependencies": { + "boolean": "^3.0.1", + "detect-node": "^2.0.4", + "globalthis": "^1.0.1", + "json-stringify-safe": "^5.0.1", + "semver-compare": "^1.0.0", + "sprintf-js": "^1.1.2" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "license": "MIT", + "optional": true + }, + "node_modules/serialize-error": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", + "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", + "license": "MIT", + "optional": true, + "dependencies": { + "type-fest": "^0.13.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "license": "BSD-3-Clause", + "optional": true + }, + "node_modules/sumchecker": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", + "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", + "license": "Apache-2.0", + "dependencies": { + "debug": "^4.1.0" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/type-fest": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", + "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", + "license": "(MIT OR CC0-1.0)", + "optional": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..990b961 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,16 @@ +{ + "name": "frontend", + "version": "1.0.0", + "description": "", + "main": "main.js", + "scripts": { + "start": "electron ." +}, + "keywords": [], + "author": "", + "license": "ISC", + "type": "commonjs", + "dependencies": { + "electron": "^41.1.0" + } +} diff --git a/logic/__pycache__/context.cpython-312.pyc b/logic/__pycache__/context.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ecb68811b9f52905d62737f2539e95a957434fb8 GIT binary patch literal 1828 zcmbVNO>7%Q6rNe{uI;+6orVNT8k$Im;Hr*G)VL~&thjPH&^8rvxCB?xW_MyXtar`K zI*o%}TvS8?m68fj5(%k6;*h8n<;W3kNL&)kPg#N#0hiuFa%xVzS^p&Nktgk&w{PCe zzW2UwW`7I@k06lm{`x_;JqZ2HUm61MuI!~?SV9`ouz_-T3}bE!hA`$45W$+~KCT6h ziCLsbns^(H$(jV(tI42!nisUcC`5dZd0+%P?P+4##8k;BRZKQ%(Hx;8vth+BqE~fO zzj8HtB_5p~Q0p7J+w*kzvv&s660%(cl1;7B=3BZecxSHXZB zM4QamjDMkLKY8iZjAp5Y9Hf=WGE2=2oE?Z~SWcmK)U<5EqN)WM&)897W_6Qf3@fXv znYyz-Uvwmrn;;tH?c@(@164s=f$+l6{Lr#k4Rmja-Fx6fs=#$!BpBVQz6JxTYF0dT zII138LM42^?mtw&Sf4&LOnDEzG*>rz@;}z%#@boPcs77g8d08mM05l*?|3xJc4R|0 z6(j42CIAX8$BKg|7|*w-hx%b~+Ej}{_r{r?(+!2{c9FJ&KL`(tgW?SfF2v{Ki@l3) zd@}UKz`YAA7w#oi5^KHHt}_ql!{U1J;m!4%-zwGE@MhQWW+1sCCMl$YTDT&E!|m!Y z7)!v06k5QlkcHk~hmV!2KXne?y7mM#YPj zWx3>;;D>aMMcN4g zPRO+nc;(1UwJ2c@)}3Rmlyf9^iarbLm=9D>U1~=x*isKY4FS*a$PYkO(C>lpqfpzN z|DVpTm}2FGr3z9jyKv7`G4p1B~)c!l^3c@sLzeVld;XyK+W7$iZX;NxeToddPw!5IIE2LC|E|CN#dse7{9P9V|)?s$^wq>`GWYYyX${5;f^f; literal 0 HcmV?d00001 diff --git a/logic/__pycache__/linking.cpython-312.pyc b/logic/__pycache__/linking.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..08beed3eeb79cbdcd207a9a96a05c3cca8040482 GIT binary patch literal 362 zcmX@j%ge<81a}^t$jk=Pk3k$5V1hC}ivbza8B!Qh7;_kM8KW2(8B&;97^0XenKfBn zf)uS}yv3WAnU@k@l$w)TmY7$P4ATpeWdUMlApR@`B&IWzFajwss9~sKTn$wj%%I8W zR|Ha~$#jb)FTW)97AuG>E(R%3Q26EOY88``pIn-onpYB&UYwsCV`N}t7E_#?SX815 zR;inupI4GvQKFlgm!6rI8k3Wso|znzlbM&DnU}6tPz&n%3LYGCC6|9@3% literal 0 HcmV?d00001 diff --git a/logic/__pycache__/notes.cpython-312.pyc b/logic/__pycache__/notes.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7bdfb56331c5b0690f071209881598bef49b628e GIT binary patch literal 565 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 ZQ^ey`)c3>rc3vB|2{AZ;_A9@G{sHL^-68-0 literal 0 HcmV?d00001 diff --git a/static/images/aossie-logo.svg b/static/images/aossie-logo.svg new file mode 100644 index 0000000..10cc0a8 --- /dev/null +++ b/static/images/aossie-logo.svg @@ -0,0 +1,24 @@ + + + + + + + + + diff --git a/static/images/logo-full.svg b/static/images/logo-full.svg new file mode 100644 index 0000000..435a6a6 --- /dev/null +++ b/static/images/logo-full.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/images/logo-icon.svg b/static/images/logo-icon.svg new file mode 100644 index 0000000..980a393 --- /dev/null +++ b/static/images/logo-icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/images/stability.svg b/static/images/stability.svg new file mode 100644 index 0000000..cd2d3a7 --- /dev/null +++ b/static/images/stability.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/style.css b/static/style.css new file mode 100644 index 0000000..2420256 --- /dev/null +++ b/static/style.css @@ -0,0 +1,121 @@ +/* Reset */ +body { + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + background: linear-gradient(to right, #eef2f7, #f8fafc); + margin: 0; + padding: 0; +} + +/* Container */ +.container { + width: 85%; + max-width: 1000px; + margin: auto; + padding: 20px; +} + +/* Header */ +.header { + display: flex; + align-items: center; + justify-content: center; + gap: 12px; + margin-bottom: 20px; +} + +.main-logo { + height: 50px; +} + +.icon { + height: 28px; +} + +/* Title */ +h1 { + text-align: center; + color: #222; +} + +/* Sections */ +.section { + background: white; + padding: 18px; + margin-top: 20px; + border-radius: 10px; + box-shadow: 0 4px 12px rgba(0,0,0,0.08); + transition: transform 0.2s ease; +} + +.section:hover { + transform: translateY(-2px); +} + +/* Textarea */ +textarea { + width: 100%; + height: 90px; + padding: 10px; + margin-top: 10px; + border-radius: 6px; + border: 1px solid #ccc; + resize: none; +} + +/* Input */ +input { + width: 100%; + padding: 10px; + margin-top: 10px; + border-radius: 6px; + border: 1px solid #ccc; +} + +/* Button */ +button { + margin-top: 10px; + padding: 10px 16px; + background: linear-gradient(135deg, #007bff, #0056b3); + border: none; + color: white; + cursor: pointer; + border-radius: 6px; + font-weight: 500; +} + +button:hover { + background: linear-gradient(135deg, #0056b3, #003f88); +} + +/* Lists */ +ul { + list-style-type: none; + padding: 0; +} + +li { + background: #eef3f9; + padding: 10px; + margin: 6px 0; + border-radius: 6px; +} + +/* Output blocks */ +pre { + background: #f1f5f9; + padding: 12px; + border-radius: 6px; + white-space: pre-wrap; +} + +/* Footer */ +.footer { + margin-top: 40px; + text-align: center; + opacity: 0.8; +} + +.aossie-logo { + height: 40px; + margin-top: 10px; +} \ No newline at end of file diff --git a/templates/index.html b/templates/index.html new file mode 100644 index 0000000..35364a8 --- /dev/null +++ b/templates/index.html @@ -0,0 +1,89 @@ + + + + + Smart Notes MVP + + + + + + +
+ + +
+ +

Smart Notes

+
+ + +
+

Add Note

+
+ + +
+
+ + +
+

Ask Question

+
+ + +
+ +

Answer:

+
{{ answer }}
+
+ + +
+

Summarize Notes

+
+ +
+ +

Summary:

+
{{ summary }}
+
+ + +
+

All Notes

+ {% if notes %} +
    + {% for note in notes %} +
  • {{ note }}
  • + {% endfor %} +
+ {% else %} +

No notes added yet.

+ {% endif %} +
+ + +
+

Related Notes

+ {% if links %} +
    + {% for link in links %} +
  • {{ link }}
  • + {% endfor %} +
+ {% else %} +

No related notes found.

+ {% endif %} +
+ + + + +
+ + + \ No newline at end of file