Your Notes, Tasks & Ideas β All in One Place
A modern, full-featured note-taking web application inspired by Evernote.
Built with Next.js 16 Β· Neon PostgreSQL Β· Google OAuth Β· Vercel
Features β’ Tech Stack β’ Getting Started β’ Deployment β’ Structure β’ Contributing
NoteFlow brings the power of professional note-taking to the web. Organize your thoughts with rich-text notes, manage tasks with due dates, categorize with notebooks and tags, and search instantly β all behind secure Google authentication.
| Feature | Description |
|---|---|
| π€ Text Formatting | Bold, Italic, Underline, Strikethrough, Highlight |
| π Headings | H1, H2, H3 support |
| π Lists | Bullet, Numbered, and Task/Checkbox lists |
| π» Code Blocks | Syntax-highlighted code snippets |
| π¬ Blockquotes | Styled quote blocks |
| π Links | Insert and edit hyperlinks |
| π Alignment | Left, Center, Right text alignment |
| β©οΈ Undo/Redo | Full history support |
| Feature | Description |
|---|---|
| π Pin Notes | Keep important notes at the top |
| β Favorites | Mark notes as favorites for quick access |
| ποΈ Notebooks | Organize notes into color-coded notebooks |
| π·οΈ Tags | Flexible tagging system with multi-tag support |
| π Search | Full-text search across titles and content |
| ποΈ Trash | Soft delete with restore and permanent delete |
| Feature | Description |
|---|---|
| β Create Tasks | Standalone task management |
| π Due Dates | Set deadlines for your tasks |
| βοΈ Completion | Toggle complete/incomplete status |
| Feature | Description |
|---|---|
| βοΈ Quick Notes | Instant note area on the home dashboard |
| πΎ Auto-Save | Saves automatically as you type |
| Feature | Description |
|---|---|
| π Google OAuth | Secure sign-in with Google account |
| π‘οΈ Session Management | Server-side sessions via NextAuth.js |
| π Data Isolation | Each user can only access their own data |
| Feature | Description |
|---|---|
| π₯οΈ Desktop | Full sidebar with all navigation |
| π± Mobile | Collapsible hamburger menu sidebar |
|
Framework |
Language |
Styling |
Database |
|
DB Provider |
ORM |
Auth |
Deployment |
|
Editor |
Icons |
Dates |
Linting |
| Requirement | Purpose |
|---|---|
| π¦ Node.js 18+ | Runtime environment |
| ποΈ Neon account | PostgreSQL database |
| π Google Cloud project | OAuth authentication |
| β² Vercel account | Deployment (optional) |
git clone https://github.com/romizone/noteflow.git
cd noteflow
npm installcp .env.example .env.localEdit .env.local with your credentials:
# ποΈ Neon Database
DATABASE_URL=postgresql://user:password@ep-xxx.region.aws.neon.tech/neondb?sslmode=require
# π Google OAuth
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
# π NextAuth
NEXTAUTH_URL=http://localhost:3000
NEXTAUTH_SECRET=generate_with_openssl_rand_base64_32- Go to Google Cloud Console
- Create or select a project
- Navigate to APIs & Services > Credentials
- Click Create Credentials > OAuth 2.0 Client ID
- Select Web application
- Add Authorized redirect URIs:
http://localhost:3000/api/auth/callback/google(development)https://your-app.vercel.app/api/auth/callback/google(production)
- Copy the Client ID and Client Secret to
.env.local
npm run db:pushnpm run devπ Open http://localhost:3000 in your browser.
- Push your repository to GitHub
- Visit vercel.com/new and import your repo
- Configure the following Environment Variables:
| Variable | Value | Description |
|---|---|---|
DATABASE_URL |
postgresql://... |
Neon connection string |
GOOGLE_CLIENT_ID |
xxx.apps.googleusercontent.com |
Google OAuth Client ID |
GOOGLE_CLIENT_SECRET |
GOCSPX-xxx |
Google OAuth Client Secret |
NEXTAUTH_URL |
https://your-app.vercel.app |
Production URL |
NEXTAUTH_SECRET |
(generated) | Run openssl rand -base64 32 |
- Click Deploy π
| Command | Description |
|---|---|
npm run db:push |
π€ Push schema changes to Neon |
npm run db:generate |
π Generate migration files |
npm run db:migrate |
|
npm run db:studio |
π₯οΈ Open Drizzle Studio (database GUI) |
noteflow/
βββ π src/
β βββ π app/
β β βββ π api/
β β β βββ π auth/[...nextauth]/ # π NextAuth API
β β β βββ π notes/ # π Notes CRUD
β β β βββ π notebooks/ # π Notebooks CRUD
β β β βββ π tags/ # π·οΈ Tags CRUD
β β β βββ π tasks/ # β
Tasks CRUD
β β β βββ π scratch-pad/ # π Scratch Pad
β β β βββ π search/ # π Search API
β β βββ π login/ # π Login page
β β βββ π notes/[id]/ # βοΈ Note editor
β β βββ π notebooks/ # π Notebooks pages
β β βββ π tags/ # π·οΈ Tags pages
β β βββ π tasks/ # β
Tasks page
β β βββ π trash/ # ποΈ Trash page
β β βββ π layout.tsx # πΌοΈ Root layout
β β βββ π page.tsx # π Home page
β βββ π components/
β β βββ π AuthGuard.tsx # π‘οΈ Auth wrapper
β β βββ π CreateNotebookModal.tsx # π Notebook modal
β β βββ π NoteCard.tsx # π Note card
β β βββ π NoteEditor.tsx # βοΈ TipTap editor
β β βββ π ScratchPad.tsx # π Scratch pad
β β βββ π SessionProvider.tsx # π Session provider
β β βββ π Sidebar.tsx # π± Navigation sidebar
β β βββ π TagManager.tsx # π·οΈ Tag selector
β βββ π lib/
β βββ π auth.ts # π NextAuth config
β βββ π auth-helpers.ts # π§ Auth utilities
β βββ π db.ts # ποΈ Database connection
β βββ π schema.ts # π Drizzle schema
β βββ π types.ts # π TypeScript types
βββ π drizzle.config.ts # βοΈ Drizzle config
βββ π next.config.ts # βοΈ Next.js config
βββ π package.json # π¦ Dependencies
βββ π .env.example # π Env template
βββ π README.md # π Documentation
ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ
β users β β notebooks β β tags β
ββββββββββββββββ€ ββββββββββββββββ€ ββββββββββββββββ€
β id (PK) βββββββ userId (FK) β β id (PK) β
β name β β id (PK) β β userId (FK) β
β email β β name β β name β
β image β β color β β createdAt β
β createdAt β β isDefault β ββββββββ¬ββββββββ
ββββββββ¬ββββββββ ββββββββ¬ββββββββ β
β β βββββββ΄ββββββββ
β βββββββ΄ββββββββ β note_tags β
β β notes β βββββββββββββββ€
β βββββββββββββββ€ β noteId (FK) β
ββββββββββββββββ userId (FK) ββββββββ tagId (FK) β
β β notebookId β βββββββββββββββ
β β title β
β β content β
β β isPinned β
β β isFavorite β
β β isTrashed β
β βββββββββββββββ
β
β ββββββββββββββββ ββββββββββββββββ
ββββ tasks β β scratch_pad β
β ββββββββββββββββ€ ββββββββββββββββ€
ββββ userId (FK) β β userId (FK) β
β title β β content β
β isCompleted β β updatedAt β
β dueDate β ββββββββββββββββ
ββββββββββββββββ
Contributions are welcome! Please follow these steps:
- π΄ Fork the repository
- π Create a feature branch (
git checkout -b feature/amazing-feature) - πΎ Commit your changes (
git commit -m 'Add amazing feature') - π€ Push to the branch (
git push origin feature/amazing-feature) - π© Open a Pull Request
This project is licensed under the MIT License β see the LICENSE file for details.
Romi Nur Ismanto β @romizone
Made with β€οΈ and β β Powered by Next.js & Neon