implementation
- the app uses the next.js app router and can be hosted on replit or vercel
- the notes and note metadata are stored in replit postgresql using drizzle orm
- the notes are statically generated and get revalidated when new notes are created or updated
- the note content is stored in markdown and rendered with react markdown
- new private notes get stored with a session_id based on local storage
- users can view, edit, & delete their own private notes and share the link with others to view
- images are uploaded to replit object storage using presigned urls
- the swipe gestures to pin/unpin, edit, & delete notes on mobile are implemented with react swipeable
- the keyboard shortcuts are inspired by vim and the command menu uses shadcn/ui command
- the og images are generated dynamically with the note's title & emoji
what I changed
this is a fork of alana goyal's notes app with the following modifications:
infrastructure
- migrated from supabase postgresql to replit's built-in postgresql database
- replaced supabase storage with replit object storage for image uploads
- using drizzle orm for type-safe database queries and schema management
- created new api routes ([/api/notes], [/api/uploads]) with input validation and session-based ownership verification
mobile experience
- mobile users land on the sidebar (notes list) first, then tap to view individual notes
- private notes shared by link bypass the sidebar redirect for direct access
- fixed mobile overflow issues with proper width calculations
- optimized touch interactions and swipe gestures
ui/ux improvements
- enabled iOS 26 notes app look
- macos-style header with traffic light buttons (close/minimize/maximize)
- collapsible sidebar with a toggle
- private notes use simple plain text editing (no rich text formatting)
gratitude
- alana goyal for creating the original open-source notes app that served as the foundation for this project
- the replit team for providing excellent database and storage infrastructure