Releases: aboderinsamuel/closedNote
v1.1.0 -- Prompt Version History
What's new
Prompt Version History
Every edit is now tracked as a versioned snapshot. Open any prompt, click Version History, and see a visual diff of every change — additions in green, removals in red. Restore any previous version in one click without overwriting the history chain.
- Full version timeline on every prompt
- Visual diff powered by Google diff-match-patch
- Smart versioning -- only creates a new version when content actually changes
- Restore without noise -- restoring a version does not create a duplicate entry
Editor improvements
- Textarea auto-resizes as you type or paste
- ⌘S to save, Escape to cancel while editing
- Paste cleanup -- strips leading/trailing blank lines on paste
- Character count shown while editing
- ⌘Enter to submit on the new prompt form
Landing page & docs
- Redesigned landing page with differentiation story, comparison table, and version history spotlight
- Updated docs with Version History section, new database table reference, and corrected migration count
v1.0.0 -- First stable release
🗒️ closedNote v0.1.0 — First Stable Release
The first stable release of closedNote — a minimalist open-source web app for saving, organizing, and reusing your best AI prompts.
Built for students, teachers, engineers, and anyone tired of re-engineering the same ChatGPT prompt twice.
👉 Live app: closednote.vercel.app
✨ What's included in this release
Core Prompt Management
- Create, edit, and delete prompts with title, content, and AI model tagging
- Organize prompts into Collections (group by topic, project, or use case)
- One-click copy — paste straight into ChatGPT, Claude, Cursor, or any AI tool
Search
- Command palette (
⌘K/Ctrl+K) for instant search across all your prompts
Image to Text (OCR)
- Upload a screenshot of any prompt or AI conversation
- Tesseract.js extracts the text offline — no API key required
- Optional AI refinement via OpenAI GPT-4o-mini or HuggingFace Zephyr-7b to clean it into a reusable prompt
Prompt Threads
- Chain multiple prompts together into ordered sequences (Prompt Threads)
- Each step can reference previous steps and map outputs to inputs
Auth & Privacy
- Email/password signup with PKCE auth via Supabase
- Row Level Security (RLS) — your prompts are private by default, always
- Session persistence across browser restarts
- Password visibility toggle on login/signup
Settings
- Add your own OpenAI or HuggingFace API key to unlock AI features
- Users without API keys still get full prompt management + offline OCR
UI/UX
- Dark mode
- Fully responsive — works on mobile
- Optimistic UI updates (no page refresh on edits)
🧪 Tests
- 25 tests passing across auth logic and UI components (Jest + React Testing Library)
- CI pipeline via GitHub Actions
🗄️ Database
- 3 Supabase migrations covering initial schema, user deletion, and Prompt Threads
- Tables:
users,prompts,tags,prompt_chains,chain_steps - Full RLS policies on all tables
⚙️ Tech Stack
- Frontend: Next.js 14 · React 18 · TypeScript · Tailwind CSS
- Backend: Supabase (PostgreSQL + PKCE Auth + RLS) · Next.js API Routes
- AI / OCR: OpenAI GPT-4o-mini · HuggingFace Zephyr-7b · Tesseract.js
- Deployment: Vercel
🚀 Getting Started
git clone https://github.com/aboderinsamuel/closedNote_v0.01.git
cd closedNote_v0.01
npm install
cp .env.example .env.local
npm run devSet NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY in .env.local. AI features are optional.
closedNote : because your prompts deserve better than browser history.