{"id":38795142,"url":"https://github.com/puni9869/pinmyblogs","last_synced_at":"2026-01-17T12:41:44.123Z","repository":{"id":269929634,"uuid":"719434413","full_name":"puni9869/pinmyblogs","owner":"puni9869","description":"Save your blogs and read it later.","archived":false,"fork":false,"pushed_at":"2026-01-01T07:44:38.000Z","size":634,"stargazers_count":1,"open_issues_count":4,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-01T10:14:17.995Z","etag":null,"topics":["awesome-list","bookmarker","ecmascript","golang","javascript","student","url","url-shortener","urllib"],"latest_commit_sha":null,"homepage":"https://pinmyblogs.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/puni9869.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2023-11-16T06:44:57.000Z","updated_at":"2026-01-01T07:44:42.000Z","dependencies_parsed_at":"2025-12-31T03:01:11.125Z","dependency_job_id":null,"html_url":"https://github.com/puni9869/pinmyblogs","commit_stats":null,"previous_names":["puni9869/pinmyblogs"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/puni9869/pinmyblogs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puni9869%2Fpinmyblogs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puni9869%2Fpinmyblogs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puni9869%2Fpinmyblogs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puni9869%2Fpinmyblogs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/puni9869","download_url":"https://codeload.github.com/puni9869/pinmyblogs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puni9869%2Fpinmyblogs/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28508523,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T11:50:55.898Z","status":"ssl_error","status_checked_at":"2026-01-17T11:50:55.569Z","response_time":85,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["awesome-list","bookmarker","ecmascript","golang","javascript","student","url","url-shortener","urllib"],"created_at":"2026-01-17T12:41:44.015Z","updated_at":"2026-01-17T12:41:44.107Z","avatar_url":"https://github.com/puni9869.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 📌 pinmyblogs — Open-Source Blog Bookmarking \u0026 Read-Later App (Go)\n\n**pinmyblogs** is an open-source **blog bookmarking**, **read-later**, and **content organization** application built\nwith **Go (Golang)**.\n\nSave blog links, extract metadata, organize reading lists, and revisit content distraction-free — fast, secure, and\nself-hosted.\n\n\u003e Ideal for developers, writers, and knowledge workers who want a simple, privacy-friendly alternative to hosted\n\u003e bookmark tools.\n\n---\n\n## 📊 Project Status \u0026 Badges\n\n[![Check](https://github.com/puni9869/pinmyblogs/actions/workflows/go.yml/badge.svg)](https://github.com/puni9869/pinmyblogs/actions/workflows/go.yml)\n![Go Version](https://img.shields.io/github/go-mod/go-version/puni9869/pinmyblogs)\n![License](https://img.shields.io/github/license/puni9869/pinmyblogs)\n![Stars](https://img.shields.io/github/stars/puni9869/pinmyblogs?style=social)\n\n---\n\n## 🔍 What is pinmyblogs?\n\n**pinmyblogs** is a lightweight **self-hosted bookmark manager** focused on:\n\n- Saving blog URLs\n- Extracting page metadata (title, favicon, etc.)\n- Organizing blogs for later reading\n- Running reliably in local or production environments\n\nIt is built with **performance, simplicity, and security** in mind.\n\n---\n\n## ✨ Features\n\n- 🔖 Save blog \u0026 article URLs\n- 🗂️ Organize reading lists\n- 🕷️ Automatic metadata scraping\n- ⚡ High-performance Go backend\n- 🧩 Clean, extensible architecture\n- 🏠 Self-hosted \u0026 privacy-friendly\n\n---\n\n## 🧱 Tech Stack\n\n- **Language:** Go (Golang)\n- **Web Framework:** Gin\n- **Database:** PostgreSQL or SQLite\n- **Frontend:** HTML templates + Tailwind CSS\n- **Build Tooling:**  + Air (hot reload)\n\n---\n\n## 🗄️ Database Support\n\npinmyblogs supports **multiple SQL databases**:\n\n### ✅ PostgreSQL (Recommended for Production)\n\n- High concurrency\n- Strong data integrity\n- Crash-safe \u0026 scalable\n\n### ✅ SQLite (Development \u0026 Testing)\n\n- Zero-config\n- File-based\n- Best for local usage\n\n```text\nProduction  → PostgreSQL\nDevelopment → SQLite\n````\n\n---\n\n## 🚀 Getting Started\n\n### 🧰 Prerequisites\n\n* Go (latest stable version)\n* PostgreSQL (optional, for production)\n* SQLite (optional, for development)\n* Make (recommended)\n\n---\n\n### 📥 Installation\n\n```bash\ngit clone https://github.com/puni9869/pinmyblogs.git\ncd pinmyblogs\n```\n\n---\n\n### ⚙️ Environment Configuration\n\n### ▶️ Run the Application\n\n```bash\nmake server\n```\n\nUses **Air** for automatic reload on code changes.\n\n---\n\n## 🧪 Testing \u0026 Quality Checks\n\nRun tests:\n\n```bash\nmake test\n```\n\nLint \u0026 static analysis:\n\n```bash\nmake lint\nmake vet\nmake govulncheck\n```\n\n---\n\n## 🗂️ Project Structure\n\n```\n.\n├── cmd/                 # Application entrypoints\n├── handlers/            # HTTP handlers\n├── middleware/          # CSP \u0026 security headers\n├── models/              # Database models\n├── pkg/                 # Shared packages (scraping, utils)\n├── templates/           # HTML templates\n├── frontend/            # Static assets\n├── types/               # Forms \u0026 shared types\n└── Makefile             # Dev \u0026 build commands\n```\n\n---\n\n## 🔐 Security\n\npinmyblogs includes production-grade security defaults:\n\n* Strict Content Security Policy (CSP)\n* Secure HTTP headers\n* Clickjacking protection\n* MIME-type sniffing prevention\n\nDesigned to be safe by default.\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome!\n\n1. Fork the repository\n2. Create a feature branch\n3. Add tests where applicable\n4. Submit a pull request\n\nSee issues for ideas and improvements.\n\n---\n\n## 🐛 Issues \u0026 Feature Requests\n\nFound a bug or have a feature idea?\n\n👉 [https://github.com/puni9869/pinmyblogs/issues](https://github.com/puni9869/pinmyblogs/issues)\n\n---\n\n## 📜 License\n\nThis project is licensed under the **MIT License**.\nSee the [LICENSE](LICENSE) file for details.\n\n---\n\n## ⭐ Why pinmyblogs?\n\n* Open-source\n* Self-hosted\n* Developer-friendly\n* Privacy-focused\n* Written in Go\n\nIf you find this project useful, please ⭐ star the repository — it helps others discover it!\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuni9869%2Fpinmyblogs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpuni9869%2Fpinmyblogs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuni9869%2Fpinmyblogs/lists"}