A full-stack knowledge operations platform for owner-scoped knowledge management, asynchronous indexing, grounded retrieval-backed answers, and persisted evaluation workflows.
Operational context is often scattered across notes, runbooks, decisions, and incident follow-ups. That fragmentation weakens recall, makes answers difficult to verify, and creates risk when AI is introduced without grounded evidence or clear reviewability.
Meridian Ledger addresses that problem with a structured internal platform for managing owned knowledge records, indexing them asynchronously, retrieving relevant evidence, generating source-constrained answers, and persisting evaluation artefacts for retrieval and groundedness review.
This repository exists to demonstrate production-minded AI and software engineering choices rather than a generic retrieval demo. It emphasizes ownership boundaries, explicit backend and frontend separation, asynchronous workflows, persisted evidence, deterministic local execution, and operator reviewability.
- sign in through a JWT-authenticated SPA
- create, search, filter, edit, and delete owner-scoped knowledge records
- queue full-workspace or single-note reindexing
- ask grounded questions over indexed notes
- inspect supporting sources returned with each answer
- run saved evaluation cases
- review persisted evaluation runs and related notes
- inspect notes, chunks, logs, and evaluation artefacts through Django admin
Meridian Ledger is split into a Django backend and a React frontend.
The backend is responsible for:
- authentication and authorization
- PostgreSQL persistence
- owner-scoped note CRUD
- asynchronous indexing with Celery and Redis
- chunking and deterministic local embeddings
- grounded retrieval and answer construction
- query logging
- evaluation case execution and persisted evaluation runs
- operator inspection through Django admin
The frontend is responsible for:
- SPA routing and protected routes
- auth state management
- typed API integration
- note management pages
- ask workflow presentation
- evaluation workflow presentation
- a user creates or updates a note
- the backend marks the note as needing indexing
- a Celery task chunks and indexes the note asynchronously
- the user asks a question
- indexed chunks for the current owner are ranked by similarity
- the answer is constructed from retrieved content only
- supporting sources and query metadata are returned
- the query is persisted as a
QueryLog
Meridian Ledger persists evaluation as part of the product, not as a separate notebook exercise.
The system stores:
EvaluationCaseEvaluationRun
A case defines:
- a question
- expected keywords
- expected note titles
A run records:
- the linked query
- whether an expected note was hit
- whether groundedness passed
- review notes showing expected versus retrieved evidence
- Django admin uses session authentication
- SPA API access uses JWT
- notes and retrieval are owner-scoped
- evaluation runs listed in the API are filtered to the authenticated user’s query history
- system evaluation cases are available to authenticated users
backend/
frontend/
docs/
.github/
docker-compose.yml
README.md
LICENSE
Run from:
D:\project-mastery\meridian-ledger
docker compose up -d
docker compose psTo stop infrastructure later, run from the same directory:
docker compose downRun from:
D:\project-mastery\meridian-ledger\backend
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -r requirements\dev.txt
Copy-Item .env.example .env
python manage.py migrate
python manage.py createsuperuserTo leave the virtual environment later:
deactivateRun from:
D:\project-mastery\meridian-ledger\frontend
npm installRun from:
D:\project-mastery\meridian-ledger\backend
.\.venv\Scripts\Activate.ps1
python manage.py shell -c "exec(open('scripts/seed_demo_data.py').read())"If you enter the Django shell manually, leave it with:
exit()The real backend environment file is:
D:\project-mastery\meridian-ledger\backend\.env
The example backend environment file is:
D:\project-mastery\meridian-ledger\backend\.env.example
For this local setup, PostgreSQL must remain aligned to the Docker host mapping:
POSTGRES_PORT=5433
The Docker Compose mapping is:
"5433:5432"
This should not be reverted unless the local environment is intentionally changed.
Use three terminals.
Run from:
D:\project-mastery\meridian-ledger\backend
.\.venv\Scripts\Activate.ps1
python manage.py runserverStop the Django server with CTRL + C.
Run from:
D:\project-mastery\meridian-ledger\backend
.\.venv\Scripts\Activate.ps1
celery -A config worker -l info --pool=soloStop the Celery worker with CTRL + C.
Run from:
D:\project-mastery\meridian-ledger\frontend
npm run devStop the Vite dev server with CTRL + C.
- SPA:
http://127.0.0.1:5173 - Django admin:
http://127.0.0.1:8000/admin/
- username:
demo_operator - password:
StrongPassword123
Use the superuser created during setup.
Run from:
D:\project-mastery\meridian-ledger\backend
.\.venv\Scripts\Activate.ps1
python manage.py check
pytest
ruff check .Run from:
D:\project-mastery\meridian-ledger\frontend
npm run test
npm run buildRun from:
D:\project-mastery\meridian-ledger
docker compose ps
git statusRun from:
D:\project-mastery\meridian-ledger\backend
.\.venv\Scripts\Activate.ps1
.\scripts\verify-backend.ps1Run from:
D:\project-mastery\meridian-ledger\frontend
.\verify-frontend.ps1If pytest, the Django server, the Celery worker, or the Vite dev server hangs unexpectedly, press CTRL + C and rerun the command from the same directory.
- architecture overview:
docs/architecture/overview.md - retrieval and groundedness evaluation:
docs/evaluation/rag-evaluation.md - evaluation cases:
docs/evaluation/evaluation-cases.md - test strategy:
docs/testing/test-strategy.md - operations runbook:
docs/operations/runbook.md - portfolio case study:
docs/case-study/portfolio-case-study.md
All screenshots are stored in:
docs/screenshots/
docs/screenshots/01-login-page.pngdocs/screenshots/02-dashboard.pngdocs/screenshots/03-create-note.pngdocs/screenshots/04-note-detail.pngdocs/screenshots/05-edit-note.pngdocs/screenshots/06-delete-note.pngdocs/screenshots/07-ask-grounded-question.pngdocs/screenshots/08-grounded-answer-with-sources.pngdocs/screenshots/09-admin-notes.pngdocs/screenshots/10-admin-query-logs.pngdocs/screenshots/11-evaluation-results.pngdocs/screenshots/12-backend-tests.pngdocs/screenshots/13-frontend-tests.pngdocs/screenshots/14-ci-success.png
Meridian Ledger is the retrieval and knowledge-assurance project in the broader portfolio. It complements systems centered on governance, compliance, and decision reliability by focusing on the internal knowledge substrate those systems often depend on: owned context capture, indexing, retrieval, source-visible answer generation, and persisted evaluation.
This repository is licensed under the MIT License. See the LICENSE file for full details.







