{"id":15314348,"url":"https://github.com/barelyhuman/thestack","last_synced_at":"2025-04-15T02:13:29.661Z","repository":{"id":176168458,"uuid":"655095587","full_name":"barelyhuman/thestack","owner":"barelyhuman","description":"Blocks of backend libraries/tech squashed together","archived":false,"fork":false,"pushed_at":"2023-09-30T19:16:42.000Z","size":354,"stargazers_count":19,"open_issues_count":3,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-04-15T02:13:13.905Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://barelyhuman.github.io/thestack/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/barelyhuman.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}},"created_at":"2023-06-17T21:53:48.000Z","updated_at":"2024-09-04T12:38:30.000Z","dependencies_parsed_at":"2023-07-09T03:31:32.807Z","dependency_job_id":"4aeeaca9-bd75-4d0a-b47e-a2526e316438","html_url":"https://github.com/barelyhuman/thestack","commit_stats":null,"previous_names":["barelyhuman/thestack"],"tags_count":1,"template":true,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barelyhuman%2Fthestack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barelyhuman%2Fthestack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barelyhuman%2Fthestack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/barelyhuman%2Fthestack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/barelyhuman","download_url":"https://codeload.github.com/barelyhuman/thestack/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248991558,"owners_count":21194894,"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","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":"2024-10-01T08:45:10.003Z","updated_at":"2025-04-15T02:13:29.641Z","avatar_url":"https://github.com/barelyhuman.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# thestack\n\nI spent the time making the decisions so you don't have to.\n\n## Documentation\n\nYou can read the [docs](/docs/) folder or the\n[web version](https://barelyhuman.github.io/thestack/)\n\n## What comes bundled\n\n- Simpler Express based server\n- Decorators + Classes for Routing\n\n```ts\nclass Auth {\n  @post('/auth/signup')\n  async signup(req, res) {\n    // handler\n  }\n}\n```\n\n- Typed (Mostly...)\n- Basic Security (Helmet, Rate Limiting, CORS)\n- API testing (Vitest + Mock Server)\n- ORM (prisma)\n- Migrations (prisma)\n- Queue (bull + redis)\n- Decorators for Queue Handling based on Worker execution\n- View Engine ([Nunjucks](https://mozilla.github.io/nunjucks/))\n\n```ts\nclass User {\n  @post('/user/invite')\n  sendInvite(req, res) {\n    const email = req.body.email\n    req.pushToQueue('email', {\n      email,\n      type: 'invite',\n    })\n  }\n}\n// jobs/email.queue.ts\nclass EmailQueueHandler {\n  @listen('email', 'invite')\n  handleInviteJob(job) {\n    // Called from the worker\n    // process the job\n  }\n}\n```\n\n- Compose (Self host services for dev / k8s)\n- Fully Docker compatible\n- Testing Mocks (Redis)\n- Swagger Doc generation using JSDoc -\n  [Documentation](https://brikev.github.io/express-jsdoc-swagger-docs/#/)\n\n```js\n  /**\n   *\n   * GET /api/ping\n   * @summary quickly check if the server is running or not\n   * @returns 200 - success - application/json\n   */\n  @get('/api/ping')\n  ping(req: Request, res: Response) {\n    req.pushToQueue('test', {\n      type: '',\n    })\n    return res.send({\n      success: true,\n      now: new Date().toISOString(),\n    })\n  }\n```\n\n## Why?\n\nVarious reasons....,\n[this might be relevant](https://reaper.is/writing/20230516-ignoring-backend-productivity)\n\n## License\n\n[MIT](/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarelyhuman%2Fthestack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbarelyhuman%2Fthestack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbarelyhuman%2Fthestack/lists"}