{"id":31663569,"url":"https://github.com/4ssh1/portfolio-builder","last_synced_at":"2025-10-07T20:06:01.176Z","repository":{"id":288880008,"uuid":"969437839","full_name":"4ssh1/Portfolio-builder","owner":"4ssh1","description":"A portfolio builder that allows users to register, upload projects, showcase skills, track profile views, and receive updates via newsletters.","archived":false,"fork":false,"pushed_at":"2025-07-12T23:24:11.000Z","size":95,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-13T01:10:36.167Z","etag":null,"topics":["expressjs","nodejs"],"latest_commit_sha":null,"homepage":"","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/4ssh1.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-04-20T06:24:36.000Z","updated_at":"2025-07-12T23:24:15.000Z","dependencies_parsed_at":"2025-06-07T18:15:15.318Z","dependency_job_id":null,"html_url":"https://github.com/4ssh1/Portfolio-builder","commit_stats":null,"previous_names":["4ssh1/jodnatech","4ssh1/portfolio-builder"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/4ssh1/Portfolio-builder","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4ssh1%2FPortfolio-builder","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4ssh1%2FPortfolio-builder/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4ssh1%2FPortfolio-builder/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4ssh1%2FPortfolio-builder/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/4ssh1","download_url":"https://codeload.github.com/4ssh1/Portfolio-builder/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/4ssh1%2FPortfolio-builder/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278838434,"owners_count":26054720,"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","status":"online","status_checked_at":"2025-10-07T02:00:06.786Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["expressjs","nodejs"],"created_at":"2025-10-07T20:02:17.201Z","updated_at":"2025-10-07T20:06:01.170Z","avatar_url":"https://github.com/4ssh1.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🧑‍💻 Portfolio Builder Web App\n\n![Build](https://img.shields.io/badge/build-passing-brightgreen)\n![License](https://img.shields.io/badge/license-MIT-blue)\n![Tech](https://img.shields.io/badge/stack-MERN-purple)\n\nA portfolio builder that allows users to register, upload projects, showcase skills, track profile views, and receive updates via newsletters.\n\n---\n\n## 🚀 Tech Stack\n\n- **Backend:** Node.js, Express.js\n- **Database:** MongoDB (Mongoose ODM)\n- **Authentication:** JWT, bcrypt\n- **File Uploads:** Cloudinary, multer\n- **Email Service:** Nodemailer\n- **API Docs:** Swagger (Live Docs)\n- **Testing:** Jest\n- **Notifications:** Web socket\n\n---\n\n## 📦 Features\n\n- 🔐 User registration \u0026 login (JWT-based)\n- 👤 Editable user profiles\n- 💾 Project uploads (with Cloudinary integration)\n- 📊 Profile view tracking\n- 🔍 Project filtering by category (frontend, backend, all)\n- 🔎 Search functionality\n- 📬 Newsletter subscription\n- 📘 Live Swagger API docs\n\n---\n\n## Installation\n\nTo get started, follow these steps:\n\n1. Clone the repository:\n   ```bash\n     git clone https://github.com/4ssh1/Jodna-portfolio-project-backend.git\n     cd Jodna-portfolio-project-backend\n   ```\n   \n\n2. Install dependencies:\n   ```bash\n     npm install\n   ```\n\n3. Set Up Environment Variables: Create a .env file in the root directory and add the necessary environment variables    \n\n4. Start the server:\n   ```bash\n     npm start\n   ```\n\n---\n\n## 📁 Project Structure\n\n```\n├── backend/\napp.js\nconfig\n├── cloudinaryConfig.js\ncontrollers\n├── authController.js\n├── engagementController.js\n├── projectController.js\n├── userController.js\nmiddlewares\n├── protect.js\n├── rateLimiter.js\n├── token.js\nmodels\n├── engagementModel.js\n├── projectModel.js\n├── subscriberModel.js\n├── userModel.js\npackage-lock.json\npackage.json\nREADME.md\nroutes\n├── profileRoute.js\n├── projectRoute.js\n├── userRoute.js\nswagger\n├── swagger.js\ntests\n├── authTest.js\n├── profileTest.js\n├── projectTest.js\nutils\n├── cloudinary.js\n├── emailService.js\n├── helpers\n│   ├── serverErrorHandler.js\n├── multer.js\n```\n\n---\n\n## 📅 Timeline\n\nThis project was developed during a 4-week sprint. Check the project plan document for weekly goals and assignments.\n\n---\n\n# 🤝 Contributing\n\nWe welcome contributions to the **Portfolio Project**! Whether it's fixing a bug, adding a feature, improving documentation, or suggesting ideas, your contributions are highly appreciated.\n\n## 🛠 How to Contribute\n\n1. **Fork the Repository**:\n   - Click the \"Fork\" button on the top right of this repository to create your own copy.\n\n2. **Clone the Forked Repository**:\n   - Clone your fork to your local machine:\n     ```bash\n     git clone https://github.com/\u003cyour-username\u003e/Jodna-portfolio-project-backend.git\n     cd Jodna-portfolio-project-backend\n     ```\n\n3. **Create a New Branch**:\n   - Create a branch for your feature or bug fix:\n     ```bash\n     git checkout -b feature/your-feature-name\n     ```\n\n4. **Make Changes**:\n   - Make your changes in the codebase. Ensure your changes follow the project's coding standards.\n\n5. **Test Your Changes**:\n   - If applicable, write tests for your changes and run them to ensure everything works:\n     ```bash\n     npm test\n     ```\n\n6. **Commit Your Changes**:\n   - Write a clear and concise commit message:\n     ```bash\n     git add .\n     git commit -m \"Add: Your descriptive commit message\"\n     ```\n\n7. **Push to Your Fork**:\n   - Push your changes to your forked repository:\n     ```bash\n     git push origin feature/your-feature-name\n     ```\n\n8. **Open a Pull Request (PR)**:\n   - Navigate to the original repository and click on \"New Pull Request\".\n   - Select your branch and provide a detailed description of your changes.\n\n## 🛡 Guidelines\n\n- Follow the [Code of Conduct](CODE_OF_CONDUCT.md) (if applicable).\n- Ensure your code passes all tests before submitting.\n- Make sure your branch is up to date with the `main` branch:\n  ```bash\n  git checkout main\n  git pull origin main\n  git merge feature/your-feature-name\n\n---\n\n## 📄 License\n\nMIT License © 2025\n\n---\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F4ssh1%2Fportfolio-builder","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F4ssh1%2Fportfolio-builder","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F4ssh1%2Fportfolio-builder/lists"}