From 737ed32521ea8652359a51485bcfa8d872a7d3e2 Mon Sep 17 00:00:00 2001
From: Harsh Mathur
Date: Wed, 22 Jul 2026 04:46:08 +0000
Subject: [PATCH 01/10] docs: implement phase 0 readiness cleanup
---
README.md | 56 +-
app/landing/page.tsx | 40 +-
app/layout.tsx | 1 -
components/editor/Editor.tsx | 14 +-
components/editor/TiptapEditor.tsx | 4 +-
components/editor/extensions/SlashCommand.ts | 9 +-
components/layout/TitleBar.tsx | 11 +-
components/palette/CommandPalette.tsx | 16 +-
core/editor/codemirror.ts | 5 +-
core/storage/dropbox.ts | 3 +-
core/sync/conflicts.ts | 2 +-
core/sync/engine.ts | 3 -
docs/production-readiness-plan.md | 508 -------------------
hooks/useSync.ts | 16 +-
hooks/useVault.ts | 48 +-
public/manifest.json | 8 +-
16 files changed, 137 insertions(+), 607 deletions(-)
delete mode 100644 docs/production-readiness-plan.md
diff --git a/README.md b/README.md
index 1e66186..388cd4a 100644
--- a/README.md
+++ b/README.md
@@ -1,21 +1,55 @@
-# Next.js template
+# OpenNotes
-This is a Next.js template with shadcn/ui.
+OpenNotes is a beta, local-first markdown notebook for calm personal writing. It is built with Next.js and stores notes in your browser today, with remote storage work underway.
-## Adding components
+## What works now
-To add components to your app, run the following command:
+- Create, edit, rename, and delete markdown notes.
+- Local persistence through IndexedDB in the current browser profile.
+- A focused editor with markdown formatting, wikilinks, slash commands, command palette, mobile sidebar, and light/dark themes.
+- No OpenNotes account or OpenNotes server is required for the local workflow.
+
+## Beta caveats
+
+OpenNotes is not production-ready remote-sync software yet. In this branch:
+
+- GitHub sync is under active development and should not be treated as a working backup or collaboration path.
+- Dropbox sync is planned after the GitHub provider is proven end to end.
+- Browser-local storage can be cleared by private browsing modes, browser resets, storage pressure, or manual site-data deletion.
+- Export/backup and full PWA/offline installability are still roadmap items unless implemented in a later branch.
+
+If your notes are important, keep an independent copy outside OpenNotes.
+
+## Where data lives
+
+Notes are saved as records in the browser's IndexedDB database for this app. The current implementation does not upload note content to an OpenNotes backend. Clearing site data for the app will remove the local vault from that browser profile.
+
+## Roadmap
+
+1. Harden the local-first note workflow and backup/export story.
+2. Wire GitHub sync end to end, including authentication, provider selection, sync status, and conflict handling.
+3. Add Dropbox only after the provider contract is reliable with GitHub.
+4. Revisit PWA/installability once real icon assets and offline behavior are in place.
+
+## Local development
```bash
-npx shadcn@latest add button
+corepack enable
+pnpm install
+pnpm dev
```
-This will place the ui components in the `components` directory.
-
-## Using components
+Then open http://localhost:3000.
-To use the components in your app, import them as follows:
+## Validation commands
-```tsx
-import { Button } from "@/components/ui/button";
+```bash
+pnpm exec eslint .
+pnpm exec tsc --noEmit
+pnpm exec vitest run
+pnpm exec next build
```
+
+## License
+
+Apache-2.0
diff --git a/app/landing/page.tsx b/app/landing/page.tsx
index cd67d73..a9cc75c 100644
--- a/app/landing/page.tsx
+++ b/app/landing/page.tsx
@@ -7,6 +7,7 @@ import {
Zap,
Lock,
} from "lucide-react"
+import Link from "next/link"
export default function Landing() {
return (
@@ -23,17 +24,17 @@ export default function Landing() {
Your storage.
- A markdown editor that stores your files in GitHub, Dropbox, or just
- your browser. No subscription. No lock-in. No server.
+ A local-first markdown editor for calm, portable notes. Your vault
+ starts in this browser. GitHub sync is under active development.
- Your notes in a private repo. Free version history. Every change
- is a commit.
+ Remote sync to a private repo is the next major milestone. Do
+ not rely on it as a working backup in this beta.
@@ -74,11 +75,11 @@ export default function Landing() {
- Dropbox
+ Dropbox later
- Syncs everywhere Dropbox does. No new accounts needed. Works
- offline.
+ Dropbox support is planned after the GitHub provider and sync
+ conflict flow are proven end to end.
@@ -90,8 +91,8 @@ export default function Landing() {
Just this browser
- No account needed. Files saved in your browser with IndexedDB.
- Connect storage later.
+ No account needed. Notes are saved locally in this browser with
+ IndexedDB while remote sync is still in progress.
@@ -111,8 +112,8 @@ export default function Landing() {
You own your data
- Files live in your storage, not ours. We never see what you
- write.
+ In the current beta, notes live in your browser storage. Keep
+ your own backup for anything important.
- Every file is a .md file. No proprietary format. Export
- anytime.
+ The editor works with markdown content and is designed around
+ portable notes rather than a proprietary document model.
@@ -141,7 +142,8 @@ export default function Landing() {
Works offline
- Edit without internet. Changes sync when you are back online.
+ The local browser vault can be edited without an OpenNotes
+ account or server. Remote sync is not production-ready yet.
@@ -156,9 +158,9 @@ export default function Landing() {
OpenNotes — open source, Apache 2.0