{"id":49594019,"url":"https://github.com/podverse/metaboost","last_synced_at":"2026-05-04T03:04:39.582Z","repository":{"id":350547698,"uuid":"1206487957","full_name":"podverse/metaboost","owner":"podverse","description":"A message collection and viewing system, intended for use with RSS value tag implementations","archived":false,"fork":false,"pushed_at":"2026-04-29T05:52:18.000Z","size":3423,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2026-04-29T07:05:49.940Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/podverse.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":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-04-10T00:59:58.000Z","updated_at":"2026-04-29T05:47:00.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/podverse/metaboost","commit_stats":null,"previous_names":["podverse/metaboost"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/podverse/metaboost","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/podverse%2Fmetaboost","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/podverse%2Fmetaboost/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/podverse%2Fmetaboost/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/podverse%2Fmetaboost/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/podverse","download_url":"https://codeload.github.com/podverse/metaboost/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/podverse%2Fmetaboost/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32592720,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"online","status_checked_at":"2026-05-04T02:00:06.625Z","response_time":58,"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":[],"created_at":"2026-05-04T03:04:38.722Z","updated_at":"2026-05-04T03:04:39.562Z","avatar_url":"https://github.com/podverse.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Metaboost\n\nHTTP API and Next.js app. Structure and tooling follow the repository standards used in this project.\n\n## Structure\n\n- **apps/api** – Standalone Express API (port 4000 by default)\n- **apps/web** – Next.js app (default **4002** on host; see `PORT` in `apps/web/package.json`)\n- **apps/web/sidecar** – Runtime-config sidecar (`WEB_SIDECAR_PORT`, default **4001** on host)\n- **Infra (database, management database, Docker):** See [infra/INFRA.md](infra/INFRA.md).\n\n## Setup\n\n**Quick path (clone → running):** See [docs/QUICK-START.md](docs/QUICK-START.md) (Make + Docker for Postgres/Valkey, API and web on host).\n\n**With Nix (Linux / macOS):** If you use [direnv](https://direnv.net/), run `direnv allow` in the repo root once. The flake provides Node 24 and the shell loads automatically. Without direnv: `nix develop` to enter the dev shell.\n\n```bash\nnpm install\n```\n\n**Local env:** App and infra `.env` files are generated by **`make local_env_setup`**, not by copying\n`.env.example` alone. See\n[docs/development/env/LOCAL-ENV-OVERRIDES.md](docs/development/env/LOCAL-ENV-OVERRIDES.md) for secrets,\noverrides, and optional `local_env_prepare` / `local_env_link`.\n[docs/QUICK-START.md](docs/QUICK-START.md) is the shortest path from clone to running (Docker infra +\n`npm run dev:all`).\n\n## Run\n\nFrom the repo root, run **`make local_env_setup`** before commands that need generated env files\n(API, sidecars, `infra/config/local/*`). Do not rely on manual `cp` from `.env.example` for a full\nlocal stack.\n\n**API and web on host (Postgres and Valkey in Docker):** After `npm install` and `make local_env_setup`,\nrun `make local_infra_up` then `npm run dev:all` (or `npm run dev:all:watch`). See\n[docs/QUICK-START.md](docs/QUICK-START.md).\n\n**API only:**\n\n```bash\nmake local_env_setup\nnpm run dev:api\n```\n\n**Web only (no sidecar):**\n\n```bash\nmake local_env_setup\nnpm run dev:web\n```\n\n**Web with sidecar (runtime config from env):**\n\n```bash\nmake local_env_setup\nnpm run dev:web-sidecar\n```\n\nThis builds the sidecar, then starts the sidecar (default **4001**) and the Next.js app (**4002**).\n`RUNTIME_CONFIG_URL` and sidecar env are written by `local_env_setup`; the app loads config from the\nsidecar at startup.\n\n## Env examples\n\n- **API**: `API_PORT`, `BRAND_NAME`, `AUTH_JWT_SECRET`, and optionally `ACCOUNT_SIGNUP_MODE`, `MAILER_ENABLED`\n  (env templates / generated `apps/api/.env`)\n- **Web**: `RUNTIME_CONFIG_URL` in app (see `apps/web/.env.example`); sidecar templates under each app’s `sidecar/` when present\n- **Exhaustive variable names, merge defaults (`local_docker` vs `remote_k8s`), and Kubernetes placement:**\n  [docs/development/env/ENV-VARS-REFERENCE.md](docs/development/env/ENV-VARS-REFERENCE.md) (regenerate after env template changes: `make env_catalog`)\n- **Groups, merge order, and semantics:**\n  [docs/development/env/ENV-REFERENCE.md](docs/development/env/ENV-REFERENCE.md)\n\n## API auth\n\nThe API is versioned under a path prefix (default **/v1**; set `API_VERSION_PATH` to change, e.g. `API_VERSION_PATH=/v2`). Example: `GET /v1/health`, `POST /v1/auth/login`. Use JWT: send `Authorization: Bearer \u003ctoken\u003e` for protected routes (e.g. `GET /v1/auth/me`, `POST /v1/auth/change-password`). Set `MAILER_ENABLED=true` for self-service signup (`POST /v1/auth/signup`). When mailer is disabled (default or `ACCOUNT_SIGNUP_MODE=admin_only`), signup is disabled; user creation is handled by the Management API when the Management track (plans 31–33) is in use.\n\n**AUTH_JWT_SECRET** (separate values for API vs management-api) and all other passwords (DB, Valkey) are generated and written by `make local_env_setup` (or `make env_setup`). Do not put placeholder passwords in env examples; re-run `make local_env_setup` to create or refresh local env files. Override files (brand.env, management-superuser.env) are applied when present; use prepare/link to share them across work trees. See [docs/development/env/LOCAL-ENV-OVERRIDES.md](docs/development/env/LOCAL-ENV-OVERRIDES.md).\n\n**API docs (Swagger):** With the API running, open [http://localhost:4000/v1/api-docs](http://localhost:4000/v1/api-docs) for interactive OpenAPI docs (prefix follows `API_VERSION_PATH`, default `/v1`). Use **Authorize** to set a Bearer token from login/signup, then try protected endpoints.\n\n## Gitflow and CI\n\nDefault branch is **develop**; open PRs against `develop`. Use `npm run start-feature` to create branches (e.g. `feature/name`, `fix/name`). CI runs when a PR targets develop (on open/update) and when a maintainer comments **/test** on a PR. See [docs/GITFLOW.md](docs/GITFLOW.md).\n\n## Scripts\n\n- `npm run build` – Build all workspaces\n- `npm run dev:api` – API only (port 4000)\n- `npm run dev:web` – Web only (default port **4002**)\n- `npm run dev:web-sidecar` – Build sidecar, then run sidecar (**4001**) and web (**4002**)\n- `npm run dev:all` – Build sidecar, then run API, sidecar, and web together\n- `npm run dev:api:watch` – API with auto-rebuild on change (tsc --watch + nodemon)\n- `npm run dev:web:watch` – Web (Next.js dev; already hot-reloads)\n- `npm run dev:all:watch` – API, sidecar, and web with auto-rebuild on change\n- `npm run lint` – ESLint + Prettier check (TS/JS, YAML, JSON, MD, etc.)\n- `npm run lint:fix` – ESLint --fix + Prettier --write (fixes all supported files, including docker-compose)\n- `npm run prettier:check` / `npm run prettier:write` – Prettier only\n\n**Version bump:** Run `./scripts/publish/bump-version.sh` when cutting a release. It updates root and all workspace `package.json` versions, then commits and pushes (no npm publish or image push).\n\n**Alpha publish:** Merging to the `alpha` branch runs the Publish Alpha workflow and pushes Docker images (api, web, web-sidecar) to GHCR. See [docs/PUBLISH.md](docs/PUBLISH.md).\n\n**GitHub labels:** Run `./scripts/github/setup-all-labels.sh` to create or update repo labels (requires `gh auth login`). See [scripts/github/SCRIPTS-GITHUB.md](scripts/github/SCRIPTS-GITHUB.md) and [docs/repo-management/GITHUB-LABELS.md](docs/repo-management/GITHUB-LABELS.md). For one-time repo setup (labels, branch protection, default branch), see [docs/repo-management/GITHUB-SETUP.md](docs/repo-management/GITHUB-SETUP.md). Dependency update policy and Dependabot (npm, Docker, Actions; Node LTS ≥ 24): [docs/repo-management/DEPENDABOT.md](docs/repo-management/DEPENDABOT.md).\n\n## LLM / Cursor\n\nSee [.llm/LLM.md](.llm/LLM.md) and [AGENTS.md](AGENTS.md) for history tracking and agent guidelines.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpodverse%2Fmetaboost","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpodverse%2Fmetaboost","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpodverse%2Fmetaboost/lists"}