{"id":21654140,"url":"https://github.com/gustavohenrique/taghub","last_synced_at":"2026-04-12T10:33:53.876Z","repository":{"id":51262720,"uuid":"250409688","full_name":"gustavohenrique/taghub","owner":"gustavohenrique","description":"All repositories that I starred in GitHub since 2009 organized by tags","archived":false,"fork":false,"pushed_at":"2023-03-07T03:12:09.000Z","size":6907,"stargazers_count":1,"open_issues_count":8,"forks_count":2,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-20T04:40:45.715Z","etag":null,"topics":["github","golang","quasar-framework","sqlite","vuejs"],"latest_commit_sha":null,"homepage":"https://taghub.gustavohenrique.com","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gustavohenrique.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}},"created_at":"2020-03-27T01:10:53.000Z","updated_at":"2021-06-08T19:44:53.000Z","dependencies_parsed_at":"2024-11-25T08:37:22.919Z","dependency_job_id":null,"html_url":"https://github.com/gustavohenrique/taghub","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/gustavohenrique/taghub","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gustavohenrique%2Ftaghub","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gustavohenrique%2Ftaghub/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gustavohenrique%2Ftaghub/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gustavohenrique%2Ftaghub/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gustavohenrique","download_url":"https://codeload.github.com/gustavohenrique/taghub/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gustavohenrique%2Ftaghub/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268285970,"owners_count":24225838,"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-08-01T02:00:08.611Z","response_time":67,"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":["github","golang","quasar-framework","sqlite","vuejs"],"created_at":"2024-11-25T08:26:15.078Z","updated_at":"2025-12-30T21:52:38.857Z","avatar_url":"https://github.com/gustavohenrique.png","language":"Go","funding_links":["https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=CLK3RJCCUNSR2\u0026currency_code=USD\u0026source=url"],"categories":[],"sub_categories":[],"readme":"[![TagHub](resources/logo.png)](https://taghub.gustavohenrique.com)\n-----\n\n[![forthebadge](https://forthebadge.com/images/badges/made-with-go.svg)](https://golang.org)\n[![forthebadge](https://forthebadge.com/images/badges/made-with-vue.svg)](https://quasar.dev)\n[![forthebadge](https://forthebadge.com/images/badges/contains-technical-debt.svg)]()\n\n[![Build Status](https://travis-ci.com/gustavohenrique/taghub.svg?branch=master)](https://travis-ci.com/gustavohenrique/taghub)\n[![Coverage Status](https://coveralls.io/repos/github/gustavohenrique/taghub/badge.svg?branch=master)](https://coveralls.io/github/gustavohenrique/taghub?branch=master)\n[![Go Report Card](https://goreportcard.com/badge/github.com/gustavohenrique/taghub)](https://goreportcard.com/report/github.com/gustavohenrique/taghub)\n[![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_donations\u0026business=CLK3RJCCUNSR2\u0026currency_code=USD\u0026source=url)\n\n[![demo](resources/demo.gif)](https://taghub.gustavohenrique.com)\n\n# TagHub\n\nTagHub gets all repositories that I starred in GitHub since 2009 and allows me to add tags for them.\n\n## Table of content\n\n- [Getting Started](#getting-started)\n- [Usage](#usage)\n- [Architecture](#architecture)\n- [Contrib](#contrib)\n- [License](#license)\n\n## Getting Started\n\nFirst, ensure that you have Go \u003e= 1.14, NodeJS \u003e= 10.16 and make utility.\nThen, create a [GitHub Personal Token](https://github.com/settings/tokens/new) and\nadd the token in `.makerc` file like this:\n\n```sh\ncd backend\necho \"GITHUB_PERSONAL_TOKEN=\u003ctoken\u003e\" \u003e .makerc\n```\n\n## Usage\n\nRunning the back-end:\n\n```sh\ncd backend\nmake run\n```\n\nOpen another terminal instance, install the Quasar Framework and run the front-end:\n\n```sh\ncd frontend\nnpm i -g @quasar/cli\nnpm run serve\n```\n\nNow, you can open the front-end:\n\n```sh\nopen http://localhost:15234  # or xdg-open in Linux systems\n```\n\nAlso, you can generate a static version and deploy it to GitHub Pages, Netlify, AWS S3 etc.\n\n```sh\ncd backend\nmake json\ncd ../site\nnpm run build\ncd dist/spa\nopen index.html\n```\n\n## Architecture\n\nThere are 3 applications inside this mono repository:\n\n- **backend**: Rest API written in Go.\n- **frontend**: Admin interface using VueJS + Quasar Framework to manage tags and repositories.\n- **site**: Static site that fetchs JSON files instead to Rest API.\n\n### Backend\n\n#### Directories\n\n```sh\n.\n├── build                # automation scripts\n├── cmd                  # exports repos and tags from database to JSON files\n├── libs                 # private libs\n│   ├── configuration    # config based on environment variables\n│   ├── errors           # add custom code used by HTTP response\n│   ├── filter           # mount an SQL Where statement based in some rules sent in POST request\n│   ├── httpclient       # FastHTTP implementation used by the GitHub client\n│   ├── github           # get starred repos from GitHub using v4 API as Rest client instead of GraphQL\n│   ├── logger           # Logrus implementation\n│   ├── stringutils      # some code to deal with strings\n│   └── testutils        # help to write tests\n├── pkg                  # store the application version according of the branch name\n├── sql                  # database schema and initial data used in tests\n└── src                  # the application source code\n    ├── containers       # containers used for dependency injection\n    ├── domain           # structs and interfaces\n    ├── handlers         # routes and endpoints using Echo Framework\n    ├── http             # HTTP server\n    ├── sqlite           # run SQL queries\n    └── services         # business logic and data transformation\n```\n\n#### Layers\n\n- **handlers**: Rest API, the application's entrypoint, receive, validate and convert requests to structs. It looks like a orchestrator, forwarding the data to the service layer.\n- **services**: Apply business roles and prepare the data before to send to the repository layer.\n- **repositories**: Consume the SQLite database.\n\n### Frontend\n\n```sh\n.\n└── src\n    ├── assets           # files compiled by Webpack\n    ├── boot             # register components and libs like Axios\n    ├── components       # Vue components\n    ├── css              # custom CSS rules\n    ├── layouts          # the top-level components\n    ├── pages            # components rendered by routes\n    ├── router           # mapping routes to pages\n    ├── services         # get and send data to back-end\n    └── statics          # images, favicon etc.\n```\n\n### Site\n\n```sh\n.\n└── src\n    ├── assets\n    ├── boot\n    ├── components\n    ├── css\n    ├── layouts\n    ├── pages\n    ├── router\n    ├── services\n    └── statics\n        └── jsonfiles    # several JSON files generated by make json command\n```\n\n## Contrib\n\n1. Open an issue asking for your new feature or bug fix.\n2. Fork this repo and send a Pull Request.\n3. Please don't be lazy as I and write some tests for you code.\n\n## License\n\nApache License 2.0, see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgustavohenrique%2Ftaghub","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgustavohenrique%2Ftaghub","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgustavohenrique%2Ftaghub/lists"}