Local-first note ranking: append, review, and rank via ELO.
This project is a React + Express.js application for reviewing and ranking notes using an ELO algorithm. All data is stored locally in the browser using localStorage.
- Node.js (v16 or higher)
- npm or yarn
Note: No database required - this app uses localStorage for data persistence.
# Complete setup for new developers
make setup
# Start development server
make dev-
Install dependencies:
make install
-
Start development server:
make dev
Run make help to see all available commands:
make setup- Complete setup for new developersmake dev- Start development servermake build- Build for productionmake start- Start production servermake check- Run TypeScript type checkingmake clean- Clean build artifactsmake status- Show project statusmake build-static- Build static bundle with relative pathsmake build-subdir- Build static bundle targeted at /append/
This application uses localStorage for data persistence as specified in the PRD. No database setup is required.
- Storage Key:
appendReview:v1 - Location: Browser localStorage
- Backup: Data is stored locally in your browser
Uses browser localStorage only; no server/database required.
src/
├── client/ # React frontend
│ ├── src/
│ │ ├── components/ # UI components
│ │ ├── pages/ # Application pages
│ │ ├── hooks/ # Custom React hooks
│ │ └── lib/ # Utility functions
├── server/ # Express.js backend
├── shared/ # Shared TypeScript types and schemas
└── package.json # Dependencies and scripts
-
First time setup:
make setup make dev
-
Daily development:
make dev
-
Before committing:
make check # Type checking make build # Ensure build works
This project uses localStorage for data persistence as per the PRD requirements. No database setup is required.
- Data Storage: Browser localStorage under key
appendReview:v1 - Schema: Defined in
src/shared/schema.ts(Zod schemas for validation) - Persistence: Automatic save to localStorage on data changes
- Development: http://localhost:5252 (both client and API)
- API Endpoints: http://localhost:5252/api/*
-
Port already in use:
- Change PORT in your environment or kill the process:
lsof -ti:5000 | xargs kill
- Change PORT in your environment or kill the process:
-
Dependencies issues:
- Try
make clean && make install
- Try
-
Data not persisting:
- Check browser localStorage (data stored under key
appendReview:v1) - Ensure you're not in incognito/private browsing mode
- Check browser localStorage (data stored under key
-
Performance issues with large notes:
- The app handles large datasets well, but browser localStorage has limits (~5-10MB)
Run make status to check your setup status and see what might be missing.
- Append Page: Add new notes to your collection
- Review Page: Compare and rank notes using ELO algorithm
- Ranking Page: View your notes sorted by rating
- Archive Page: Manage archived notes
- Settings: Configure rating algorithm parameters
See Architecture for an overview of components and tooling:
- docs/architecture.md
You can deploy the UI as pure static files; the Express server is optional for local development convenience.
Build variants (Make targets wrap npm scripts):
# Relative asset paths (portable into any subfolder like /append/)
make build-static
# Absolute asset paths rooted at /append/
make build-subdirOutput directory: src/dist/public/
Cloudflare Pages:
- Project root:
src - Build command:
make build-static(ormake build-subdirif deploying strictly at /append/) - Output directory:
dist/public
Existing site subfolder (e.g. https://example.com/append/):
- Run
make build-static(recommended for portability) - Copy contents of
src/dist/public/into your site'sappend/directory - Link to it with
<a href="/append/">Append & Review</a>
Configure base path:
- Default (unset): relative assets (
./) for portability - Set
VITE_BASE_PATH=/append/during build for absolute subfolder references
State persists per browser via localStorage (appendReview:v1). No server required.