From c1d8f5775e1542d88659d7b07e704337e30e5cf3 Mon Sep 17 00:00:00 2001
From: Sparsh Sam
Date: Tue, 30 Jun 2026 11:08:52 -0400
Subject: [PATCH] docs: align repository with Kovina Repository Standard
---
CONTRIBUTING.md | 59 +------
README.md | 234 ++++++++++++++++++---------
assets/branding/icon-512.png | Bin 0 -> 22918 bytes
assets/branding/icon-source.png | Bin 0 -> 23417 bytes
assets/branding/icon.svg | 4 +
assets/gallery/dashboard-mobile.png | Bin 0 -> 65069 bytes
assets/gallery/screenshot-main.png | Bin 0 -> 325460 bytes
assets/gallery/screenshot-search.png | Bin 0 -> 314851 bytes
assets/hero/dashboard-desktop.png | Bin 0 -> 325460 bytes
docs/Architecture.md | 37 +++++
docs/Contributing.md | 12 ++
docs/Deployment.md | 17 ++
docs/Development.md | 39 +++++
docs/Testing.md | 20 +++
14 files changed, 291 insertions(+), 131 deletions(-)
create mode 100644 assets/branding/icon-512.png
create mode 100644 assets/branding/icon-source.png
create mode 100644 assets/branding/icon.svg
create mode 100644 assets/gallery/dashboard-mobile.png
create mode 100644 assets/gallery/screenshot-main.png
create mode 100644 assets/gallery/screenshot-search.png
create mode 100644 assets/hero/dashboard-desktop.png
create mode 100644 docs/Architecture.md
create mode 100644 docs/Contributing.md
create mode 100644 docs/Deployment.md
create mode 100644 docs/Development.md
create mode 100644 docs/Testing.md
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f29b61e..cc0641c 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,55 +1,12 @@
-# Contributing To OpenLedger
+# Contributing to OpenLedger
-Thanks for considering a contribution. OpenLedger is intentionally small, calm, and privacy-first. Changes should make the app more trustworthy, understandable, and maintainable without turning it into a bank-connected growth product.
+Please see [docs/Contributing.md](docs/Contributing.md) for the full contributing guide.
-## Local Setup
+## Quick Links
-```bash
-git clone https://github.com/sparshsam/openledger.git
-cd openledger
-npm install
-npm run dev
-```
+- [Development Setup](docs/Development.md)
+- [Architecture](docs/Architecture.md)
+- [Deployment](docs/Deployment.md)
+- [Testing](docs/Testing.md)
-Open `http://localhost:3000`.
-
-## Required Checks
-
-Run these before opening a pull request:
-
-```bash
-npm run lint
-npm run typecheck
-npm run build
-```
-
-For UI changes, also check:
-
-- Desktop around `1440x1000`
-- Mobile around `390x900`
-- CSV import preview
-- Manual transaction form
-- Account management
-- JSON export/import
-
-## Product Principles
-
-- No bank login unless it is optional and clearly separated from local mode.
-- No shame language, gamification, or manipulative finance copy.
-- Prefer clear data ownership over convenience.
-- Keep privacy limitations explicit.
-- Keep the interface quiet and legible.
-
-## Pull Requests
-
-Please include:
-
-- What changed
-- Why it changed
-- Validation performed
-- Screenshots for visual changes
-- Known limitations or follow-up work
-
-## License
-
-By contributing, you agree that your contributions are provided under the project's AGPL-3.0-or-later license.
+By contributing, you agree that your contributions will be licensed under AGPLv3.
diff --git a/README.md b/README.md
index fc470d8..d61aee7 100644
--- a/README.md
+++ b/README.md
@@ -1,109 +1,183 @@
-# OpenLedger
+
+
+
+
+
+
OpenLedger
+
+ A private, local-first personal finance ledger.
+
+ No bank connections, no dashboards, no noise. Your financial data stays on your device.
+
+
+
-**A private, local-first personal finance ledger. No bank connections, no dashboards, no noise.**
+
+
+
-[](https://ledger.kovina.org)
-[](https://github.com/sparshsam/openledger/actions/workflows/ci.yml)
-[](LICENSE)
-[](https://nextjs.org)
-[](https://www.typescriptlang.org)
+
-OpenLedger is a calm, local-first finance tool for everyday budgeting and records. It runs entirely in the browser — your financial data stays on your device unless you choose to back it up.
+
-**Live app:** [https://ledger.kovina.org](https://ledger.kovina.org)
+[](https://ledger.kovina.org)
+[](https://github.com/sparshsam/openledger/releases)
+[](https://github.com/sparshsam/openledger)
-
+
-## Quick Links
+
-| Link | Description |
-| --- | --- |
-| [Live app](https://ledger.kovina.org) | Production deployment on Vercel |
-| [Architecture docs](docs/architecture.md) | Data model, auth, and sync architecture |
-| [Security policy](SECURITY.md) | Reporting guidance and current limitations |
-| [Contributing](CONTRIBUTING.md) | Local setup and contribution expectations |
-| [Changelog](CHANGELOG.md) | Notable project changes |
-| [License](LICENSE) | AGPL-3.0-or-later |
+---
+
+## Gallery
+
+
+
+
+
+
+
+
+
+
+---
+
+## Why OpenLedger
+
+Most finance tools want to connect to your bank, analyze your spending, and sell you insights. OpenLedger does none of that.
+
+**It's a ledger — not a dashboard.** Enter transactions manually. Track accounts, budgets, and goals. Your data lives in your browser. Cloud backup is optional and opt-in. No analytics, no telemetry, no third-party data collection. No bank credentials or Plaid connections.
+
+
+
+---
## Features
-- **Accounts** — Create checking, credit, savings, and loan accounts. Every transaction belongs to an account.
-- **Transactions** — Manual entry with edit, duplicate, delete. Search, filter by date/account/category/type, sortable columns.
-- **CSV Import** — Import bank statement CSV/TSV files with column mapping, preview, duplicate detection, and account selection.
-- **Budgets** — Monthly spending plans with progress tracking and over-budget warnings.
-- **Goals** — Savings milestones with target amounts, progress tracking, and contribution support.
-- **Recurring Entries** — Schedule-based recurring transaction engine with upcoming entry preview.
-- **Receipt Capture** — Photo upload from camera or gallery, stored in Supabase Storage.
-- **Cloud Sync** — Signed-in users can manually back up and restore their ledger to Supabase.
-- **Search** — Global search across all transactions with Quick Jump keyboard navigation.
-- **Guest Mode** — Full local functionality without signing in. No account required.
-- **MCP Server** — AI agents (Claude Code, Cursor, etc.) can read/write your data via the Model Context Protocol.
-- **PWA** — Installable as a standalone app with service worker caching.
-
-## Tech Stack
-
-| Layer | Technology |
-|-------|-----------|
-| Framework | Next.js 16 (App Router) |
-| Language | TypeScript 5 |
-| Styling | Tailwind CSS 4 + custom CSS |
-| State | React hooks + `localStorage` persistence |
-| Auth | Supabase Auth (Google OAuth) |
-| Cloud | Supabase Postgres (Elora project, `openledger_` prefix) |
-| Crash Reporting | Sentry (optional) |
-| Hosting | Vercel → [ledger.kovina.org](https://ledger.kovina.org) |
-| License | AGPL-3.0-or-later |
-
-## Screenshots
-
-| Ledger dashboard | Transactions view |
+
+
+| | |
|---|---|
-|  |  |
+| **Accounts** — Checking, credit, savings, loan. Every transaction belongs to an account. | **Transactions** — Manual entry, edit, duplicate, delete. Search, filter, sort. |
+| **CSV Import** — Bank statement CSV/TSV import with column mapping, preview, dedup. | **Budgets** — Monthly spending plans with progress tracking and over-budget warnings. |
+| **Goals** — Savings milestones with target amounts and progress tracking. | **Recurring Entries** — Schedule-based recurring transaction engine with preview. |
+| **Receipt Capture** — Photo upload from camera or gallery to Supabase Storage. | **Guest Mode** — Full local functionality without signing in. No account required. |
+| **Cloud Sync** — Manual backup and restore to Supabase (opt-in). | **Search** — Global search with Quick Jump keyboard navigation. |
+| **MCP Server** — AI agents can read/write your data via Model Context Protocol. | **PWA** — Installable as a standalone app with offline caching. |
+
+
+
+
+
+---
+
+## Designed For
+
+**People who want a calm, honest view of their finances — no algorithms, no upsells.**
+
+- **Budget-conscious individuals** tracking everyday spending against monthly plans
+- **Freelancers** keeping simple income/expense records
+- **Anyone tired of apps that try to sell them something while they check their balance
+
+
-## Privacy
+---
-OpenLedger is **local-first by design**:
+## Design Philosophy
-- All data stays in your browser's `localStorage` by default.
-- CSV parsing happens locally — no data is uploaded to a server.
-- Cloud backup is **opt-in** — only triggered manually by signed-in users.
-- No analytics, no telemetry, no third-party data collection.
-- No bank credentials or Plaid connections.
+> _"A calm finance tool — quiet, capable, private."_
-> **Important:** `localStorage` is convenient but not encrypted secure storage. Export JSON backups regularly and store them somewhere you control.
+No dashboards. No charts begging for attention. No push notifications. Local-first by design — your data lives in your browser unless you choose to back it up. Clean typography, generous spacing, dark-mode first. Every screen has one job.
-## Local Development
+
-```bash
-git clone https://github.com/sparshsam/openledger.git
-cd openledger
-npm install
-npm run dev
-```
+---
-Open [http://localhost:3000](http://localhost:3000). The app works fully without any environment variables.
+## Built With
-### Optional: Supabase auth + cloud backup
+
+
+
+
+
+
+
+
+
-Copy `.env.example` to `.env.local` and uncomment the Supabase variables to enable Google sign-in and cloud backup.
+
-## Deployment
+---
-Deploys automatically from `main` to Vercel:
+## Version Journey
-```bash
-npx vercel --prod
-```
+| Version | Date | Highlights |
+|---------|------|------------|
+| **v0.11.0** | 2026-06 | Receipt capture, cloud sync, MCP server |
+| **v0.10.0** | 2026-05 | Goals, recurring entries, CSV import engine |
+| **v0.9.0** | 2026-05 | Budgets, search with Quick Jump |
+| **v0.8.0** | 2026-04 | Guest mode, PWA readiness |
+| **v0.7.0** | 2026-04 | Transaction search, filters, sortable columns |
+| **v0.6.0** | 2026-03 | Multi-account support, CSV import |
+| **v0.5.0** | 2026-03 | Accounts, transaction CRUD |
+| **v0.4.0** | 2026-02 | IndexedDB persistence, local-first architecture |
+| **v0.3.0** | 2026-02 | TypeScript migration, Tailwind CSS |
+| **v0.2.0** | 2026-01 | Basic ledger UI, manual entry |
+| **v0.1.0** | 2026-01 | Initial prototype |
-Required environment variables for production:
-- `NEXT_PUBLIC_SUPABASE_URL` — Supabase project URL
-- `NEXT_PUBLIC_SUPABASE_ANON_KEY` — Public anon key
-- `SUPABASE_SERVICE_ROLE_KEY` — For MCP token auth (server-only)
+[Full Changelog](CHANGELOG.md)
-## What's Next
+
-See [ROADMAP.md](ROADMAP.md) for planned work. Current release is **v0.9.11** — Release Readiness.
+---
## License
-AGPL-3.0-or-later. See [LICENSE](LICENSE).
+AGPL-3.0-or-later — see [LICENSE](LICENSE)
+
+Built by [@sparshsam](https://github.com/sparshsam)
+
+
+
+---
+
+## Part of the Open Collection
+
+
+
+
+
+
+ OpenPalette
+ A color studio for designers
+ Repo ·
+ Web
+
+
+
+ OpenSend
+ Free file sharing, no account needed
+ Repo ·
+ Web
+
+
+
+ OpenSprout
+ Plant care records
+ Repo ·
+ Web
+
+
+
+ OpenTone
+ Offline music library
+ Repo
+
+
+
+
+
+
+ View all Open* repositories →
+
diff --git a/assets/branding/icon-512.png b/assets/branding/icon-512.png
new file mode 100644
index 0000000000000000000000000000000000000000..c4b4260628039a7866b3053407c1934ede0c342b
GIT binary patch
literal 22918
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%0D*F
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
+
+ OL
+
\ No newline at end of file
diff --git a/assets/gallery/dashboard-mobile.png b/assets/gallery/dashboard-mobile.png
new file mode 100644
index 0000000000000000000000000000000000000000..1e8a2c36df5c6b3a13dd3732b5f089977e8a2986
GIT binary patch
literal 65069
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