{"id":24844409,"url":"https://github.com/tapascript/jobsync","last_synced_at":"2025-10-14T16:31:05.195Z","repository":{"id":249469095,"uuid":"767386797","full_name":"tapascript/jobsync","owner":"tapascript","description":"An Open Source Job Hunting Platform Built By the Community for the Community","archived":false,"fork":false,"pushed_at":"2024-08-13T04:12:30.000Z","size":504,"stargazers_count":3,"open_issues_count":11,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T09:04:16.456Z","etag":null,"topics":["drizzle-orm","nextjs","postgresql","shadcn-ui","tailwindcss"],"latest_commit_sha":null,"homepage":"","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/tapascript.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":["atapas"]}},"created_at":"2024-03-05T07:51:04.000Z","updated_at":"2024-07-30T18:50:13.000Z","dependencies_parsed_at":"2024-07-24T13:30:58.223Z","dependency_job_id":null,"html_url":"https://github.com/tapascript/jobsync","commit_stats":null,"previous_names":["tapascript/jobsync"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tapascript/jobsync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tapascript%2Fjobsync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tapascript%2Fjobsync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tapascript%2Fjobsync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tapascript%2Fjobsync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tapascript","download_url":"https://codeload.github.com/tapascript/jobsync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tapascript%2Fjobsync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279019573,"owners_count":26086752,"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-10-14T02:00:06.444Z","response_time":60,"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":["drizzle-orm","nextjs","postgresql","shadcn-ui","tailwindcss"],"created_at":"2025-01-31T09:18:21.719Z","updated_at":"2025-10-14T16:31:04.834Z","avatar_url":"https://github.com/tapascript.png","language":"TypeScript","funding_links":["https://github.com/sponsors/atapas"],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://github.com/tapascript/jobsync/blob/master/LICENSE\" target=\"blank\"\u003e\u003cimg src=\"https://img.shields.io/github/license/tapascript/jobsync?style=flat-square\" alt=\"License\" /\u003e\u003c/a\u003e\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-6-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\u003ca href=\"https://github.com/tapascript/jobsync/fork\" target=\"blank\"\u003e\n\u003cimg src=\"https://img.shields.io/github/forks/tapascript/jobsync?style=flat-square\" alt=\"next-js-launchpad forks\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/tapascript/jobsync/stargazers\" target=\"blank\"\u003e\n\u003cimg src=\"https://img.shields.io/github/stars/tapascript/jobsync?style=flat-square\" alt=\"next-js-launchpad stars\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/tapascript/jobsync/issues\" target=\"blank\"\u003e\n\u003cimg src=\"https://img.shields.io/github/issues/tapascript/jobsync?style=flat-square\" alt=\"next-js-launchpad issues\"/\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/tapascript/jobsync/pulls\" target=\"blank\"\u003e\n\u003cimg src=\"https://img.shields.io/github/issues-pr/tapascript/jobsync?style=flat-square\" alt=\"next-js-launchpad pull-requests\"/\u003e\n\u003c/a\u003e\n\n# 🚀 JobSync\n\nAn initiative of the [tapaScript community](https://youtube.com/@tapasadhikary) to learn Full Stack Engineering and Open Source Culture.\n\n## ✨ Features\nTBA\n\n## Getting Started\n\n- Install depenedencies using\n  ```bash\n  npm install\n\n  # Or its yarn pnpm bun equivalents\n  ```\n\n- Start the application using\n  ```bash\n  npm run dev\n\n  # Or its yarn pnpm bun equivalents\n  ```\n\u003c!-- Project should be public for the above command to work --\u003e\n\n## Folder Structure\n\n```bash\n.\n├── __tests__\n├── lib\n├── public\n└── src\n    ├── app\n    └── components\n        ├── footer\n        └── ui\n    ├── config\n    ├── constants\n    ├── context\n    ├── data\n    ├── db\n    ├── hooks\n    ├── modules\n    ├── queries\n    ├── services\n    ├── store\n    └── utils\n├── styles\n├── types\n```\n\n**\\_\\_tests\\_\\_**: This folder contains all 'tests'.\n\n**lib**: This folder may contain utility functions that can be converted later into packages that are used across multiple applications.\n\n**public**: Self explanatory.\n\n**src/components**: This directory contains your UI components. It's further subdivided into ui for generic UI components and shared for components that might be reused across different parts of your application.\n\n\u003e [Conventions for src/components](#convention)\n\n**src/constants**: As the name suggests this folder contains constants.\n\n**src/context**: The context folder in React JS is a folder that stores all of the context files for the application. Context is a way to pass data through the component tree without having to pass props down manually at every level. This can be useful for data that needs to be accessed by many components, such as the current user or the current state of the application.\n\n**src/data**: The data folder in React JS is used to store data assets such as JSON files that contain information used in the application. It is similar to the assets folder, but it is specifically for storing data.\n\n**src/db**: The db folder in React JS is typically used to store database-related files, such as database configuration files, migration scripts, and seed files.\n\n**src/hooks**: This directory may house custom hooks that are used throughout your application.\n\n\u003e [Conventions for src/hooks](#convention2)\n\n**src/modules**: Modules which is also synonymous with 'sections/features' are logical groupings of code that make up the larger pages.\n\n**src/queries**: This directory may contain GraphQL queries.\n\n**src/services**: This folder helps separate the concerns of your application by isolating data fetching and manipulation logic from the components that render the UI.\n\n**src/store**: The store folder in React JS is used to store global state data that is used throughout the application. This data can be anything from the current user's login status to the contents of a shopping cart. The store folder is typically created in the root directory of the project and contains a number of files, including the store itself, actions, and reducers.\n\n**src/utils**: This directory may contain utility functions that do not make sense to convert into packages later.\n\n**styles**: As the name suggests, this directory contains the css pages that is responsible for styling.\n\n**types**: This folder contains TypeScript type definitions.\n\n## Conventions\n\nThroughout the project, unless otherwise mentioned, we will be using the following convention:\n\n- folders and files are named in lowercase with words separated by hyphen (kebab-case). For example, `my-folder` or `my-file`.\n- Functions -\u003e `camelCase` E.g. _filterProductsByType_ , _formatCurrency_\n- Variables -\u003e `camelCase` E.g. _products_, _productsFiltered_\n- Global constants -\u003e all caps `UPPERCASE`. For example: `MAX_VALUE`, `MIN_VALUE`\n- Object constants -\u003e Singular, capitalized with const assertion and optionally satisfies type (if there is one).\n\n```js\nconst ORDER_STATUS = {\n    pending: 'pending',\n    fulfilled: 'fulfilled',\n    error: 'error',\n  } as const satisfies OrderStatus;\n```\n\n- component names -\u003e `PascalCase` E.g. _export function Footer() {}_\n- types should have `.d.ts` extension. E.g. _root.d.ts_\n- use arrow functions wherever possible.\n- ui folder can contain granular level components like _button_, _dialog_, _input_ etc which can be used to build other components.\n- use given folders for various kinds of files. E.g. _types should reside in types folder_\n\nNOTE: Check granular level conventions below for overiding rules (if any). If there are cases where industry standards over-ride the rules mentioned above, please feel free to use them. For example convention for naming hooks.\n\n\u003e \u003ca id=\"convention\"\u003eConventions for src/components\u003c/a\u003e\n\n- ui components will go inside the ui folder\n- each component will be a folder of its own. Sub-components, if any will reside in the same folder. Each such folder will have index.ts file which will export all components. E.g. `export { Footer as default } from './footer';`\n- separate folder for routes. E.g. about-us route will have a folder by the same name inside component folder which will have other components inside it.\n\nExample: take a look at the `footer` component.\n\n\u003e \u003ca id=\"convention2\"\u003eConventions for src/hooks\u003c/a\u003e\n\n- `camelCase` beginning with the word _use_ e.g. useFetchData: A generic fetching hook for making HTTP requests to a specified endpoint.\n\n## 🤝 Contributing\n\nContributions are always welcome!\n\nSee [CONTRIBUTING.md](https://github.com/tapascript/jobsync/blob/main/CONTRIBUTING.md) for ways to get started.\n\nPlease adhere to this project's [code of conduct](https://github.com/tapascript/jobsync/blob/main/CODE_OF_CONDUCT.md).\n\n## 🙏 Support Us\n\nThis is an OSS project by the [tapaScript Community](https://youtube.com/@tapasadhikary). We need all the support we can get. Please give this project a ⭐️ to encourage and show that you liked it.\n\nIf you found the project helpful, consider supporting us on GitHub.\n\n## Credit\nThis project was created from [this Next.js Open Source project template](https://github.com/CreoWis/next-js-launchpad).\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftapascript%2Fjobsync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftapascript%2Fjobsync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftapascript%2Fjobsync/lists"}