{"id":49264221,"url":"https://github.com/raykavin/gokit","last_synced_at":"2026-04-25T09:06:43.115Z","repository":{"id":349233076,"uuid":"1201559418","full_name":"raykavin/gokit","owner":"raykavin","description":null,"archived":false,"fork":false,"pushed_at":"2026-04-05T02:00:25.000Z","size":39,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-04-05T03:22:01.975Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","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/raykavin.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-04T20:57:27.000Z","updated_at":"2026-04-05T01:59:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/raykavin/gokit","commit_stats":null,"previous_names":["raykavin/gopkg","raykavin/gokit"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/raykavin/gokit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raykavin%2Fgokit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raykavin%2Fgokit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raykavin%2Fgokit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raykavin%2Fgokit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/raykavin","download_url":"https://codeload.github.com/raykavin/gokit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/raykavin%2Fgokit/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32256244,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-25T04:23:17.126Z","status":"ssl_error","status_checked_at":"2026-04-25T04:21:53.360Z","response_time":59,"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":[],"created_at":"2026-04-25T09:06:42.507Z","updated_at":"2026-04-25T09:06:43.107Z","avatar_url":"https://github.com/raykavin.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# gokit\n\n`gokit` is a Go module for shared libraries that can be reused across different projects. The goal is to keep common building blocks in one place so teams can reduce code duplication, standardize recurring infrastructure concerns, and move faster when starting or evolving services.\n\nAt the moment, the repository provides utilities for configuration loading, HTTP requests, logging, database access, retry workflows, spreadsheet exports, terminal UX, and authenticated pREST integrations, with an emphasis on low coupling and practical reuse between applications.\n\n## Purpose\n\nThis module exists to:\n\n- centralize reusable code across projects\n- avoid reimplementing the same utilities in multiple repositories\n- provide a common base for infrastructure-related concerns\n- improve maintenance, consistency, and long-term reuse across services\n\n## Available packages\n\n- [`config`](./config/README.md): configuration loading, validation, reload handling, and environment variable expansion\n- [`database`](./database/README.md): typed `database/sql` helpers and GORM bootstrap utilities\n- [`http`](./http/README.md): HTTP request helpers, shared header constants, and compressed response handling\n- [`logger`](./logger/README.md): reusable structured logging built on top of `zerolog`\n- [`prest`](./prest/README.md): authenticated pREST client with typed JSON decoding and token reuse\n- [`retry`](./retry/README.md): context-aware retry helper with exponential backoff and caller-defined retry rules\n- [`spreadsheet`](./spreadsheet/README.md): CSV and XLSX export helpers with multi-sheet support and configurable header styling\n- [`terminal`](./terminal/README.md): terminal banners, headers, highlighted output, and concurrent progress rendering\n\n## Installation\n\nTo use the module in another project:\n\n```bash\ngo get github.com/raykavin/gokit\n```\n\nThen import only the packages you need in the consuming application.\n\n## Documentation index\n\nThe root README is intentionally focused on repository-level information. Package-specific usage, examples, and API notes live next to the corresponding code:\n\n- [`config/README.md`](./config/README.md)\n- [`database/README.md`](./database/README.md)\n- [`http/README.md`](./http/README.md)\n- [`logger/README.md`](./logger/README.md)\n- [`prest/README.md`](./prest/README.md)\n- [`retry/README.md`](./retry/README.md)\n- [`spreadsheet/README.md`](./spreadsheet/README.md)\n- [`terminal/README.md`](./terminal/README.md)\n\n## Reuse strategy\n\nThis repository can grow over time as new shared libraries emerge from real project needs. A good rule of thumb is to move code here when it:\n\n- appears repeatedly across different services\n- represents generic infrastructure or integration logic\n- is not tightly coupled to the business rules of a single system\n\nThat way, each application can stay focused on domain logic while reusing a common foundation for recurring technical concerns.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraykavin%2Fgokit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fraykavin%2Fgokit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fraykavin%2Fgokit/lists"}