{"id":28178450,"url":"https://github.com/ryomendev/devnotes","last_synced_at":"2025-07-26T00:34:49.647Z","repository":{"id":291346832,"uuid":"977072644","full_name":"RyomenDev/DevNotes","owner":"RyomenDev","description":"DevNotes – Personal Notes App using Next.js Full Stac","archived":false,"fork":false,"pushed_at":"2025-05-04T03:02:02.000Z","size":73,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-04T03:20:00.490Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RyomenDev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-03T11:11:38.000Z","updated_at":"2025-05-04T03:02:05.000Z","dependencies_parsed_at":"2025-05-04T03:20:03.075Z","dependency_job_id":"8b61eb00-ce89-4c48-8dc7-ed7f976f371a","html_url":"https://github.com/RyomenDev/DevNotes","commit_stats":null,"previous_names":["ryomendev/devnotes"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyomenDev%2FDevNotes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyomenDev%2FDevNotes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyomenDev%2FDevNotes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RyomenDev%2FDevNotes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RyomenDev","download_url":"https://codeload.github.com/RyomenDev/DevNotes/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254448569,"owners_count":22072765,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-16T01:12:28.555Z","updated_at":"2025-07-26T00:34:49.632Z","avatar_url":"https://github.com/RyomenDev.png","language":"JavaScript","readme":"# 🌐 Project: DevNotes – Personal Notes App\n\nA full-stack Next.js app where users can sign up, log in, and **create private notes**. It covers** authentication, API routes, CRUD operations, and MongoDB integration**.\n\n## 🔧 Features:\n\n- User registration and login (JWT-based)\n- Create, read, update, and delete (CRUD) personal notes\n- Protected routes (only logged-in users can see their notes)\n- Responsive UI using Tailwind CSS\n- MongoDB for storing users and notes\n- Simple dashboard for managing notes\n\n| Feature                    | Description                                                           |\n| -------------------------- | --------------------------------------------------------------------- |\n| 🔐 User Auth               | Register/Login with **JWT** and password hashing (`bcrypt`)           |\n| 📒 CRUD Notes              | Create, Read, Update, Delete notes using Next.js API routes + MongoDB |\n| 🚫 Protected Routes        | Only authenticated users can view and manage their notes              |\n| 💻 Responsive UI           | Built with **Tailwind CSS**                                           |\n| 📦 MongoDB + Mongoose      | Database storage for users and notes                                  |\n| 🔄 Middleware              | Used for verifying JWT in protected API routes                        |\n| 🌍 App Router + API Routes | Using Next.js **App Router** and `/app/api/` for backend endpoints    |\n\n## 🧰 Tech Stack:\n\n- Next.js (Frontend + API routes)\n- Tailwind CSS (Styling)\n- MongoDB + Mongoose (Database)\n- JWT (Authentication)\n- Bcrypt (Password hashing)\n- Axios (Frontend API calls)\n\n## 🧠 Key Concepts:\n\n- How to use **Next.js API routes** as backend endpoints\n- JWT-based **authentication** with secure password handling\n- CRUD operations with MongoDB using Mongoose\n- Using **middleware** in API routes (e.g., JWT verification)\n- Working with protected client-side pages\n- Managing global state or context (optional)\n\n| Concept                | Application Example                           |\n| ---------------------- | --------------------------------------------- |\n| API Routes             | `app/api/notes` for CRUD endpoints            |\n| JWT Authentication     | Login, register, protect notes route          |\n| MongoDB + Mongoose     | Define `User` and `Note` schemas              |\n| Bcrypt                 | Hashing passwords before saving them          |\n| Middleware             | Token validation for secure access to notes   |\n| Client-side Protection | Redirect unauthenticated users from dashboard |\n| Tailwind CSS           | Styling all components responsively           |\n\n## 🗂️ Phases to Build\n\n**Phase 1: Auth System**\n\n- [ ] Register + Login pages\n- [ ] API routes for auth\n- [ ] Store JWT in localStorage or cookies\n- [ ] Auth middleware for API\n\n**Phase 2: Notes System**\n\n- [ ] Note schema + model\n- [ ] CRUD APIs (/api/notes, /api/notes/[id])\n- [ ] Dashboard UI to manage notes\n- [ ] Client-side state refresh after actions\n\n**Phase 3: Polishing**\n\n- [ ] Protected routing logic\n- [ ] Better form validations\n- [ ] UI refinements\n\n## 🚀 Deployment\n\n- Frontend: Vercel\n- Database: MongoDB Atlas\n- Use render.com for backend\n\n## 📁 Final Ideal Folder Structure\n\n```\nsrc/\n├── app/\n│   ├── login/\n│   │   └── page.jsx\n│   ├── register/\n│   │   └── page.jsx\n│   ├── dashboard/\n│   │   └── page.jsx\n│   ├── api/\n│   │   ├── auth/\n│   │   │   ├── login/route.js\n│   │   │   └── register/route.js\n│   │   └── notes/\n│   │       ├── route.js\n│   │       └── [id]/route.js\n│   ├── layout.js\n│   └── page.js\n│\n├── components/\n│   ├── Navbar.jsx\n│   ├── Form.jsx\n│   └── NoteCard.jsx\n│\n├── models/\n│   ├── User.js\n│   └── Note.js\n│\n├── lib/\n│   ├── mongodb.js\n│   └── auth.js\n│── middleware.js\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryomendev%2Fdevnotes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fryomendev%2Fdevnotes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fryomendev%2Fdevnotes/lists"}