{"id":29852480,"url":"https://github.com/hasnaintypes/thescribbly","last_synced_at":"2026-04-12T17:33:00.101Z","repository":{"id":297915690,"uuid":"998271753","full_name":"hasnaintypes/theScribbly","owner":"hasnaintypes","description":"The Scribbly is a modern, full-stack blogging platform built with Next.js, offering a sleek and responsive interface for discovering, reading, and publishing content.","archived":false,"fork":false,"pushed_at":"2025-06-10T08:54:27.000Z","size":5922,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-10-12T12:44:02.611Z","etag":null,"topics":["authentication","blog","blogging-platform","comment-system","dark-mode-toggle","firebase","fullstack","fullstack-development","mongodb","next-auth","nextjs","prisma","react","ssg","ssr","swr"],"latest_commit_sha":null,"homepage":"https://thescribbly.vercel.app/","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/hasnaintypes.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-06-08T08:44:50.000Z","updated_at":"2025-07-18T03:13:25.000Z","dependencies_parsed_at":"2025-06-22T09:37:59.264Z","dependency_job_id":null,"html_url":"https://github.com/hasnaintypes/theScribbly","commit_stats":null,"previous_names":["nainee99/the-scribbly","nainee99/thescribbly","hasnaintypes/thescribbly"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hasnaintypes/theScribbly","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasnaintypes%2FtheScribbly","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasnaintypes%2FtheScribbly/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasnaintypes%2FtheScribbly/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasnaintypes%2FtheScribbly/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hasnaintypes","download_url":"https://codeload.github.com/hasnaintypes/theScribbly/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hasnaintypes%2FtheScribbly/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281355386,"owners_count":26486904,"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-27T02:00:05.855Z","response_time":61,"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":["authentication","blog","blogging-platform","comment-system","dark-mode-toggle","firebase","fullstack","fullstack-development","mongodb","next-auth","nextjs","prisma","react","ssg","ssr","swr"],"created_at":"2025-07-29T21:06:11.614Z","updated_at":"2025-10-27T23:05:41.845Z","avatar_url":"https://github.com/hasnaintypes.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The Scribbly\n\n\n**The Scribbly** is a full-featured **blogging web application** built with [Next.js](https://nextjs.org/). It allows users to publish, explore, and manage creative blog content. It supports dynamic content rendering, markdown-rich text editing, and image hosting with [Cloudinary](https://cloudinary.com/). The backend uses [Prisma ORM](https://www.prisma.io/) for robust and type-safe database interaction.\n\nThe application leverages modern web development practices, including server-side rendering (SSR), static site generation (SSG), and modular architecture for high performance and maintainability.\n\n---\n\n## Table of Contents\n\n- [Features](#features)\n- [Project Structure](#project-structure)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Environment Variables](#environment-variables)\n- [Prisma Commands](#prisma-commands)\n- [Scripts](#scripts)\n- [Technologies Used](#technologies-used)\n- [Contributing](#contributing)\n- [License](#license)\n- [Acknowledgements](#acknowledgements)\n\n---\n\n## Features\n\n- **Rich Text Editor** using React Quill for creating blog posts.\n- **Dynamic Routing** for individual post pages and category filtering.\n- **Image Uploads with Cloudinary**, replacing Firebase for media storage and optimization.\n- **Theme Toggle** with dark/light modes via React Context API.\n- **Pagination and Filtering** for browsing posts efficiently.\n- **Authentication** with Google OAuth using NextAuth.js.\n- **Server-Side Rendering (SSR)** and **Static Site Generation (SSG)** for fast performance and SEO.\n- **Responsive Design** for seamless experience across all devices.\n\n---\n\n## Project Structure\n\n```\n├── public/                 # Static assets (images, icons, etc.)\n├── src/\n│   ├── app/                # Application routes (App Router)\n│   ├── components/         # UI components (Card, Menu, etc.)\n│   ├── context/            # React context for theming and state\n│   ├── providers/          # Context providers and shared logic\n├── prisma/                 # Prisma schema and migrations\n├── .env.example            # Example environment configuration\n├── .eslintrc.json          # ESLint configuration\n├── jsconfig.json           # JS/TS config and path aliases\n├── next.config.js          # Next.js configuration\n├── package.json            # Dependencies and scripts\n└── README.md               # Project documentation\n```\n\n---\n\n## Installation\n\n1. **Clone the repository**\n\n```bash\ngit clone https://github.com/your-username/the-scribbly.git\ncd the-scribbly\n```\n\n2. **Install dependencies**\n\n```bash\nnpm install\n```\n\n3. **Configure environment variables**\n\nCopy `.env.example` to `.env` and fill in your credentials:\n\n```bash\ncp .env.example .env\n```\n\n4. **Push and seed the database (optional)**\n\n```bash\nnpx prisma db push\nnpx prisma db seed\n```\n\n5. **Start the development server**\n\n```bash\nnpm run dev\n```\n\nVisit [http://localhost:3000](http://localhost:3000)\n\n---\n\n## Usage\n\n### Development\n\n```bash\nnpm run dev\n```\n\n### Production\n\n```bash\nnpm run build\nnpm start\n```\n\n---\n\n## Environment Variables\n\nAll environment-specific variables are stored in a `.env` file. An example file is provided as `.env.example`:\n\n```env\nGOOGLE_ID=your-google-client-id\nGOOGLE_SECRET=your-google-client-secret\n\nNEXTAUTH_URL=http://localhost:3000\nNEXTAUTH_SECRET=your-nextauth-secret\n\nDB_PASSWORD=your-db-password\nDB_USER=your-db-username\n\nDATABASE_URL=mongodb+srv://your-db-username:your-db-password@your-cluster.mongodb.net/your-db-name?retryWrites=true\u0026w=majority\u0026appName=your-app-name\n\nNEXT_PUBLIC_CATEGORIES_API_URL=http://localhost:3000/api/categories\nNEXT_PUBLIC_HOST_URL=http://localhost:3000\n\nNEXT_PUBLIC_CLOUDINARY_CLOUD_NAME=your-cloudinary-cloud-name\nNEXT_PUBLIC_CLOUDINARY_API_KEY=your-cloudinary-api-key\nCLOUDINARY_API_SECRET=your-cloudinary-api-secret\n```\n\n---\n\n## Prisma Commands\n\n- **Push schema changes to DB**:\n\n  ```bash\n  npx prisma db push\n  ```\n\n- **Open Prisma Studio** (visual DB interface):\n\n  ```bash\n  npx prisma studio\n  ```\n\n- **Generate Prisma Client**:\n\n  ```bash\n  npx prisma generate\n  ```\n\n- **Run a migration** (optional):\n\n  ```bash\n  npx prisma migrate dev --name init\n  ```\n\n---\n\n## Scripts\n\n| Command         | Description                    |\n| --------------- | ------------------------------ |\n| `npm run dev`   | Starts the development server  |\n| `npm run build` | Builds the app for production  |\n| `npm start`     | Runs the production server     |\n| `npm run lint`  | Lints the codebase with ESLint |\n\n---\n\n## Technologies Used\n\n| Category             | Tool / Library                            |\n| -------------------- | ----------------------------------------- |\n| **Framework**        | [Next.js](https://nextjs.org)             |\n| **Database ORM**     | [Prisma](https://www.prisma.io)           |\n| **Authentication**   | [NextAuth.js](https://next-auth.js.org/)  |\n| **Cloud Media**      | [Cloudinary](https://cloudinary.com)      |\n| **Rich Text Editor** | [React Quill](https://react-quill.js.org) |\n| **Linting**          | [ESLint](https://eslint.org)              |\n| **Styling**          | CSS Modules                               |\n| **React State**      | React Context API                         |\n\n---\n\n## Contributing\n\nWe welcome contributions! To contribute:\n\n1. Fork the repo.\n2. Create a feature branch:\n\n   ```bash\n   git checkout -b feature/your-feature\n   ```\n\n3. Make your changes and commit:\n\n   ```bash\n   git commit -m \"feat: add your feature\"\n   ```\n\n4. Push and create a pull request:\n\n   ```bash\n   git push origin feature/your-feature\n   ```\n\nPlease ensure your code passes ESLint checks and follows the project's structure and naming conventions.\n\n---\n\n## License\n\nThis project is licensed under the [MIT License](LICENSE).\n\n---\n\n## Acknowledgements\n\n- Built using [Next.js](https://nextjs.org/), [Prisma](https://www.prisma.io/), [Cloudinary](https://cloudinary.com), and [NextAuth.js](https://next-auth.js.org/)\n- Inspired by platforms like Medium and Hashnode\n- Made possible by the open-source community\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhasnaintypes%2Fthescribbly","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhasnaintypes%2Fthescribbly","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhasnaintypes%2Fthescribbly/lists"}