An implementation of Vannevar Bush's Memex. Simple optional scrolling RSS feed reader (no CSS or real parsing!), note taking and retrieval, and a local LLM assistant that can answer questions based on your notes.
The frontend is located in lib, the backend is located in backend. Place LLM GGUFs in backend/models. Backend is a FastAPI project running SQLite as a local database, frontend is Flutter. Descriptions of architecture and features are located in descriptions.
- Python 3.10+
- Flutter SDK (latest stable)
- Navigate to the backend directory:
cd backend - Create and activate a virtual environment with uv:
uv venv source .venv/bin/activate - Install dependencies and sync environment:
uv sync
- Start the backend server:
The backend will run on
uv run uvicorn main:app --reload
http://localhost:8000by default.
- Return to the project root:
cd .. - Get Flutter packages:
flutter pub get
- Run the app (choose your platform):
- Mobile (Android/iOS):
flutter run
- Web:
flutter run -d chrome
- Desktop (Linux/Mac/Windows):
flutter run -d linux # or -d macos / -d windows
- Mobile (Android/iOS):
What's more interesting than the software itself is its development process. I pick a feature from the handwritten "roadmap" in descriptions/main.md and specify its functional requirements to an LLM. To meet non-functional requirements, I specify certain implementation details (such as names of API endpoints and their functions) and pitfalls to avoid. I ask the LLM to write a detailed document for the implementation, and I review it. The LLM writes a first draft of these functions and their tests, fully covering the desired behavior. I then iterate through a test-driven development loop until the tests pass, and finally manually QA myself.