{"id":31641910,"url":"https://github.com/daniyal-abbassi/personal-blog-jamstack-top","last_synced_at":"2026-04-08T18:02:09.744Z","repository":{"id":287974238,"uuid":"966407227","full_name":"daniyal-abbassi/Personal-Blog-Jamstack-TOP","owner":"daniyal-abbassi","description":"Developed a Jamstack personal Blog with a Node.js/Express.js RESTful API, Prisma (PostgreSQL), and JWT authentication. Features two pre-built React (Vite) frontends: an admin panel (shadcn/ui) and a public blog (Material-UI).under-development","archived":false,"fork":false,"pushed_at":"2025-08-13T23:07:22.000Z","size":65072,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-07T03:35:38.302Z","etag":null,"topics":["backend","component-architecture","expressjs","frontend","jamstack","jwt","material-ui","nodejs","prisma","react","shadcn-ui"],"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/daniyal-abbassi.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-14T21:56:23.000Z","updated_at":"2025-08-13T23:07:25.000Z","dependencies_parsed_at":"2025-04-14T23:27:50.520Z","dependency_job_id":"6c0edf76-e2dc-45e2-a728-eac1f3471431","html_url":"https://github.com/daniyal-abbassi/Personal-Blog-Jamstack-TOP","commit_stats":null,"previous_names":["daniyal-abbassi/blog-backend","daniyal-abbassi/personal-blog-jamstack-top"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/daniyal-abbassi/Personal-Blog-Jamstack-TOP","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniyal-abbassi%2FPersonal-Blog-Jamstack-TOP","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniyal-abbassi%2FPersonal-Blog-Jamstack-TOP/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniyal-abbassi%2FPersonal-Blog-Jamstack-TOP/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniyal-abbassi%2FPersonal-Blog-Jamstack-TOP/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/daniyal-abbassi","download_url":"https://codeload.github.com/daniyal-abbassi/Personal-Blog-Jamstack-TOP/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/daniyal-abbassi%2FPersonal-Blog-Jamstack-TOP/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31567227,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T14:31:17.711Z","status":"ssl_error","status_checked_at":"2026-04-08T14:31:17.202Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["backend","component-architecture","expressjs","frontend","jamstack","jwt","material-ui","nodejs","prisma","react","shadcn-ui"],"created_at":"2025-10-07T03:26:15.908Z","updated_at":"2026-04-08T18:02:09.710Z","avatar_url":"https://github.com/daniyal-abbassi.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Full-Stack JamStack Blog - TOP\n\n[![Project Status: WIP – Initial development is in progress, but there has not yet been a stable, usable release suitable for the public.](https://www.repostatus.org/badges/latest/wip.svg)](https://www.repostatus.org/#wip)\n![Node.js](https://img.shields.io/badge/Node.js-339933?style=for-the-badge\u0026logo=nodedotjs\u0026logoColor=white) ![Express.js](https://img.shields.io/badge/Express.js-000000?style=for-the-badge\u0026logo=express\u0026logoColor=white) ![PostgreSQL](https://img.shields.io/badge/PostgreSQL-4169E1?style=for-the-badge\u0026logo=postgresql\u0026logoColor=white) ![Prisma](https://img.shields.io/badge/Prisma-2D3748?style=for-the-badge\u0026logo=prisma\u0026logoColor=white) ![JWT](https://img.shields.io/badge/JWT-000000?style=for-the-badge\u0026logo=jsonwebtokens\u0026logoColor=white) ![React](https://img.shields.io/badge/React-20232A?style=for-the-badge\u0026logo=react\u0026logoColor=61DAFB) ![Vite](https://img.shields.io/badge/Vite-646CFF?style=for-the-badge\u0026logo=vite\u0026logoColor=white) ![Material-UI](https://img.shields.io/badge/Material--UI-0081CB?style=for-the-badge\u0026logo=material-ui\u0026logoColor=white) ![shadcn/ui](https://img.shields.io/badge/shadcn%2Fui-000000?style=for-the-badge\u0026logo=shadcnui\u0026logoColor=white) ![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge\u0026logo=tailwind-css\u0026logoColor=white)\n\nA modern blog platform built with Node.js/Express.js **backend** and React frontends, following **JamStack principles**. Features a RESTfull API, PostgreSQL database with Prisma ORM, JWT authentication, and two distinct frontends: an **admin panel** and a **public blog**.\n\n\n![Posts](./screenshots/all-post-page.png)\n---\n\n## Table of Contents\n\n-   [Project Structure](#project-structure)\n-   [Tech Stack](#tech-stack)\n-   [Getting Started](#getting-started)\n-   [Screenshots](#screenshots)\n-   [Contributing](#contributing)\n\n## Project Structure\n\n```\n.\n├── backend/         # Node.js API, Prisma schema, etc.\n└── frontend/\n    ├── private-client/  # Admin Panel (shadcn/ui)\n    └── public-client/   # Public Blog (Material-UI)\n```\n\n## Tech Stack\n\n- **Backend**\n\n  - Node.js\n  - Express.js\n  - Prisma\n  - PostgreSQL\n  - JWT\n  - Cloudinary\n\n- **Frontend**\n  - React (Vite)\n  - shadcn/ui (Admin)\n  - Material-UI (Public)\n  - React Router\n  - Tailwind CSS (pre-built)\n\n## Getting Started\n\nFollow these steps to run the project locally.\n\n**1. Prerequisites:**\n\n- Node.js\n- PostgreSQL\n- `npm` or `yarn`\n\n**2. Setup \u0026 Configuration:**\n\n- Clone the repository: `git clone https://github.com/your-username/your-repo-name.git`\n- Install dependencies in all three directories (`/backend`, `/frontend/public-client`, `/frontend/private-client`):\n\n```bash\nnpm install\n```\n\n- In the `/backend` directory, create a `.env` file and provide your `DATABASE_URL` and `JWT_SECRET`.\n- Run database migrations from the `/backend` directory:\n  ```bash\n  npx prisma migrate dev\n  ```\n\n**3. Run the Application:**\n\nYou will need three separate terminal windows to run the full application.\n\n- **Backend Server** (from `/backend`):\n  ```bash\n  node app.js\n  ```\n- **Public Client** (from `/frontend/public-client`):\n  ```bash\n  npm run dev\n  ```\n- **Admin Panel** (from `/frontend/private-client`):\n  ```bash\n  npm run dev\n  ```\n\n---\n\n## Screenshots\n\n![Main Page/Dark](./screenshots/all-post-page.png)\n![Main Page/Light](./screenshots/posts-page-llight.png)\n![Latest Section](./screenshots/latest-posts-page.png)\n![Admin Panel](./screenshots/admin-panel.png)\n![Single Post](./screenshots/one-post-page.png)\n![Sign-up/Sign-in](./screenshots/sign-up.png)\n\n**Admin Panel**\n![Admin Panel GIF](./screenshots/admin-panel.gif)\n---\n\n## Contributing\n\nContributions are welcome. Please fork the repository, create a feature branch, and open a pull request. For bugs and feature requests, please open an issue on the repository's \"Issues\" tab.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniyal-abbassi%2Fpersonal-blog-jamstack-top","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdaniyal-abbassi%2Fpersonal-blog-jamstack-top","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdaniyal-abbassi%2Fpersonal-blog-jamstack-top/lists"}