{"id":22383801,"url":"https://github.com/jorbush/jorbites","last_synced_at":"2026-06-07T10:01:26.073Z","repository":{"id":254886080,"uuid":"646198921","full_name":"jorbush/jorbites","owner":"jorbush","description":"a web to share recipes","archived":false,"fork":false,"pushed_at":"2025-04-11T16:03:01.000Z","size":5110,"stargazers_count":2,"open_issues_count":9,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-13T03:17:46.359Z","etag":null,"topics":["cloudinary","cypress","jest","mongodb","nextjs","prisma","react","tailwindcss","typescript","vitest"],"latest_commit_sha":null,"homepage":"https://jorbites.com","language":"TypeScript","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/jorbush.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}},"created_at":"2023-05-27T15:51:34.000Z","updated_at":"2025-04-11T05:24:38.000Z","dependencies_parsed_at":"2024-08-26T20:16:58.795Z","dependency_job_id":"dc2c7897-fb4f-40db-874c-698d0b168813","html_url":"https://github.com/jorbush/jorbites","commit_stats":null,"previous_names":["jorbush/jorbites"],"tags_count":11,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jorbush%2Fjorbites","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jorbush%2Fjorbites/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jorbush%2Fjorbites/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jorbush%2Fjorbites/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jorbush","download_url":"https://codeload.github.com/jorbush/jorbites/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248657911,"owners_count":21140846,"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":["cloudinary","cypress","jest","mongodb","nextjs","prisma","react","tailwindcss","typescript","vitest"],"created_at":"2024-12-05T01:15:23.064Z","updated_at":"2026-06-07T10:01:26.011Z","avatar_url":"https://github.com/jorbush.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jorbites\n\n**Jorbites** is a web platform for sharing and discovering delicious recipes. Users can post their own recipes, like and comment on others.\n\n## Features\n- **CRUD Operations:** Create, Read, Update and Delete.\n- **Authentication:** SSO via Google and GitHub using NextAuth.\n- **Image Handling:** Image optimization with Next Image, storage via Cloudinary.\n- **User Interactions:** Pagination, recipe filtering by category, dark theme, email notifications and multi-language support (English, Spanish, Catalan).\n- **Gamification:** User leveling and verification.\n- **Notifications:** Receive emails for comments, likes, and new recipes.\n\n## Architecture\n\n![architecture](/architecture/architecture.png)\n\n- **Fullstack APP:** [Next.js](https://nextjs.org/) (React with Server Side Rendering), TypeScript and Tailwind CSS. Deployed on Vercel.\n- **Database:** [MongoDB](https://www.mongodb.com/). Deployed on MongoDB Atlas (AWS under the hood). The NextJS APP uses [Prisma ORM](https://www.prisma.io/) to interact with the database.\n- **Authentication:** [NextAuth](https://next-auth.js.org/) with Google and GitHub providers for SSO.\n- **Image Handling:** [Cloudinary](https://cloudinary.com/) for image storage and optimization. It is used for recipe images and user avatars.\n\n## Getting Started\n\n### Prerequisites\n\nTo run Jorbites locally, you will need to set up a MongoDB database and create a `.env` file with the following content:\n\n```bash\nDATABASE_URL=your_mongodb_url\nNEXTAUTH_SECRET=your_nextauth_secret\nGITHUB_ID=your_github_id\nGITHUB_SECRET=your_github_secret\nGOOGLE_CLIENT_ID=your_google_client_id\nGOOGLE_CLIENT_SECRET=your_google_client_secret\nNEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=your_cloudinary_cloud_name\nNEXT_PUBLIC_CLOUDINARY_UPLOAD_PRESET=your_cloudinary_upload_preset\n```\n\n### Running Locally\nUse the following command to start the development server:\n```bash\nnpm run dev\n```\n\n## Testing\n\nJorbites is thoroughly tested to ensure a robust experience.\n\n- **Component \u0026 Page Testing:** [Vitest](https://vitest.dev/).\n\n    ```bash\n    npm run vitest\n    ```\n- **API \u0026 Server Actions Testing:** [Jest](https://jestjs.io/).\n\n    ```bash\n    npm run jest\n    ```\n- **End-to-End Testing:** [Cypress](https://www.cypress.io/).\n\n    ```bash\n    npm run cypress\n    npm run cypress:open # to open the Cypress GUI\n    ```\n\n## Linting \u0026 Formatting\n\nJorbites uses Next Lint and Oxlint for linting:\n```bash\nnpm run lint # Next Lint\nnpx run oxlint # Oxlint\n```\n\nAnd Prettier for code formatting:\n```bash\nnpm run format\nnpm run check-format # check for formatting issues\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjorbush%2Fjorbites","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjorbush%2Fjorbites","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjorbush%2Fjorbites/lists"}