{"id":27612783,"url":"https://github.com/lauslim12/expert-systems","last_synced_at":"2026-02-15T00:31:28.335Z","repository":{"id":39864029,"uuid":"397559079","full_name":"lauslim12/expert-systems","owner":"lauslim12","description":"Expert Systems Research to diagnose Tuberculosis Disease with a touch of Software Engineering with Go and React","archived":false,"fork":false,"pushed_at":"2022-11-15T13:11:59.000Z","size":504,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-23T01:55:57.422Z","etag":null,"topics":["certainty-factor","chakra-ui","docker","expert-system","forward-chaining","golang","react"],"latest_commit_sha":null,"homepage":"","language":"Go","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/lauslim12.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}},"created_at":"2021-08-18T10:22:43.000Z","updated_at":"2023-08-01T16:38:56.000Z","dependencies_parsed_at":"2022-07-26T16:02:17.979Z","dependency_job_id":null,"html_url":"https://github.com/lauslim12/expert-systems","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lauslim12/expert-systems","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lauslim12%2Fexpert-systems","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lauslim12%2Fexpert-systems/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lauslim12%2Fexpert-systems/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lauslim12%2Fexpert-systems/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lauslim12","download_url":"https://codeload.github.com/lauslim12/expert-systems/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lauslim12%2Fexpert-systems/sbom","scorecard":{"id":580129,"data":{"date":"2025-08-11","repo":{"name":"github.com/lauslim12/expert-systems","commit":"018513aad29cbc11c46beb78c8733bafb9e5dac9"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.5,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Code-Review","score":0,"reason":"Found 0/14 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/application.yml:1","Warn: no topLevel permission defined: .github/workflows/heroku.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/application.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/lauslim12/expert-systems/application.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/application.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/lauslim12/expert-systems/application.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/application.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/lauslim12/expert-systems/application.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/application.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/lauslim12/expert-systems/application.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/heroku.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/lauslim12/expert-systems/heroku.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/heroku.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/lauslim12/expert-systems/heroku.yml/main?enable=pin","Warn: containerImage not pinned by hash: .devcontainer/Dockerfile:5","Warn: containerImage not pinned by hash: Dockerfile:2","Warn: containerImage not pinned by hash: Dockerfile:20","Warn: containerImage not pinned by hash: Dockerfile:40","Info:   0 out of   5 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   4 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"52 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GO-2025-3770 / GHSA-vrw8-fxc6-2r93","Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-67hx-6x53-jw92","Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-fwr7-v2mv-hh25","Warn: Project is vulnerable to: GHSA-qwcr-r2fm-qrc7","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-w8qv-6jwh-64r5","Warn: Project is vulnerable to: GHSA-pxg6-pf52-xh8x","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-ghr5-ch3p-vcr6","Warn: Project is vulnerable to: GHSA-rv95-896h-c2vc","Warn: Project is vulnerable to: GHSA-qw6h-vgh9-j6wx","Warn: Project is vulnerable to: GHSA-74fj-2j2h-c42q","Warn: Project is vulnerable to: GHSA-pw2r-vq6v-hr8c","Warn: Project is vulnerable to: GHSA-jchw-25xp-jwwc","Warn: Project is vulnerable to: GHSA-cxjh-pqwp-8mfp","Warn: Project is vulnerable to: GHSA-fjxv-7rqg-78g4","Warn: Project is vulnerable to: GHSA-c7qv-q95q-8v27","Warn: Project is vulnerable to: GHSA-4www-5p9h-95mh","Warn: Project is vulnerable to: GHSA-9gqv-wp59-fq42","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-rp65-9cf3-cjxr","Warn: Project is vulnerable to: GHSA-76c9-3jph-rj3q","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-rhx6-c78j-4q9w","Warn: Project is vulnerable to: GHSA-7fh5-64p2-3v2j","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw","Warn: Project is vulnerable to: GHSA-m6fv-jmcg-4jfg","Warn: Project is vulnerable to: GHSA-76p7-773f-r4q5","Warn: Project is vulnerable to: GHSA-cm22-4g7w-348p","Warn: Project is vulnerable to: GHSA-4wf5-vphf-c2xc","Warn: Project is vulnerable to: GHSA-jgrx-mgxx-jf9v","Warn: Project is vulnerable to: GHSA-72xf-g2v4-qvf3","Warn: Project is vulnerable to: GHSA-hc6q-2mpp-qw7j","Warn: Project is vulnerable to: GHSA-4vvj-4cpr-p986","Warn: Project is vulnerable to: GHSA-wr3j-pwj9-hqq6","Warn: Project is vulnerable to: GHSA-4v9v-hfq4-rm2v","Warn: Project is vulnerable to: GHSA-9jgg-88mc-972h","Warn: Project is vulnerable to: GHSA-j8xg-fqg3-53r7","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-20T18:58:06.333Z","repository_id":39864029,"created_at":"2025-08-20T18:58:06.333Z","updated_at":"2025-08-20T18:58:06.333Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29461911,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-14T22:42:09.113Z","status":"ssl_error","status_checked_at":"2026-02-14T22:42:05.053Z","response_time":53,"last_error":"SSL_read: 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":["certainty-factor","chakra-ui","docker","expert-system","forward-chaining","golang","react"],"created_at":"2025-04-23T01:55:48.532Z","updated_at":"2026-02-15T00:31:28.318Z","avatar_url":"https://github.com/lauslim12.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Expert Systems\n\nExpert System Research (diagnosis of Tuberculosis, focuses on TB for lungs, with Forward Chaining and Certainty Factor algorithm) in the form of an Application Programming Interface (API) with a touch of Software Engineering with Go and React.\n\n**Research Paper**: **[Expert API for Early Detection of TB Disease with Forward Chaining and Certainty Factor Algorithms (2022)](https://informatica.si/index.php/informatica/article/view/3947)**, published in Informatica, an International Journal of Computing and Informatics, Slovenia.\n\n## Abstract\n\nDespite being a curable disease, Tuberculosis has become the leading cause of death of infectious disease prior to COVID-19. It has asymptomatic infections that are hard to detect for weeks or years. Although there have been many studies on Tuberculosis disease detection and prevention, very few of them discuss the creation of an expert system based on API. Hence, in this study we propose an Expert API that implements Forward Chaining and Certainty Factor algorithms for the task of Tuberculosis early detection. The evaluation of the proposed system was carried out using several testing methods and in-depth interviews with medical experts. We got a satisfactory result for this study.\n\n**Keywords**: Certainty Factor, Expert System, Forward Chaining, REST API, Tuberculosis.\n\n## Features\n\n- API-based architecture with Go as the implementation of the inference engine.\n- Usage of Certainty Factor and Forward Chaining algorithms in order to infer results.\n- Responsive web design with complete `a11y` support with React and TypeScript.\n- Built with performance in mind and deployed natively on a Cloud Platform.\n- Codebase is fully formatted, linted, and documented with either JSDoc or Godoc.\n- Fully unit-tested API with 100% code coverage.\n- Supports `i18n`, with `en` and `id` as the internationalized languages.\n- Simple, intuitive UI for a good user experience with ChakraUI and Ant Design.\n- App includes 404 page and dark mode support.\n\n## Requirements\n\n- [Docker](https://www.docker.com/) (if you want to containerize)\n- [Go 1.18+](https://golang.org/)\n- [Node.js 16+](https://nodejs.org/en/)\n- [Yarn 1.22+](https://yarnpkg.com/)\n- Shell that supports `curl`, `make`, and `sh`. WSL / Ubuntu / OS X should be able to do this without much configuration (Bash version 3.0+).\n\nNote: The tech stack may or may not be upgraded as time progresses (for example, from Node.js 16 to Node.js 18, or from React 18 to React 19 in the future).\n\n## GitHub Codespaces\n\nThis repository supports GitHub Codespaces with a dedicated `.devcontainer`. You can create a Codespace based on the provided template if you want to get this application up and running as soon as possible. If you are going with this approach, after summoning the Codespace, you need to spawn two terminals: one to run `make start`, and the other to run `cd web` and then `yarn start`. You can see the result in the port-forwarded URL. All dependencies and setup are done in the container creation.\n\n## Installation (Development)\n\nTo develop further, you just need to do the following steps.\n\n- Clone this repository.\n\n```bash\ngit clone git@github.com:lauslim12/expert-systems.git\n```\n\n- Switch to this repository.\n\n```bash\ncd expert-systems\n```\n\n- Spawn another terminal, as you need two terminals: one to run Go, one to run the React application. Make sure to run the Go application first to prevent 'fail to proxy' error in React (development only).\n\n```bash\n# terminal 1\nmake start\n\n# terminal 2\ncd web\nyarn --frozen-lockfile\nyarn start\n```\n\n- You're good to go! Remember that the Go application does not hot-reload, while the React application does!\n\n- Keep in mind that CI exists in order to make the code in proper standards. However, it's always nice to run the following before committing:\n\n```bash\n# for Go application\nmake format\n\n# for React application\nyarn lint\n```\n\n## Installation (Production)\n\nThere are two ways to run this application **for production**: first is to run with Docker, second is to run this manually. The recommended way is to run this with Docker.\n\n### Manual\n\n- Clone this repository.\n\n```bash\ngit clone git@github.com:lauslim12/expert-systems.git\n```\n\n- Switch to this repository.\n\n```bash\ncd expert-systems\n```\n\n- Run unit tests first if you want.\n\n```bash\nmake test\n```\n\n- If you want to run this manually, please build React application first.\n\n```bash\ncd web \u0026\u0026 yarn --frozen-lockfile \u0026\u0026 yarn build\n```\n\n- Build the Go application. Don't forget to return to the main repository by using `cd ..`, assuming you are in `web` folder.\n\n```bash\nmake build\n```\n\n- Start the application!\n\n```bash\n./expert-systems\n```\n\n- Look at e2e or integration tests while the application is running. You might need to use another terminal.\n\n```bash\nmake e2e\n```\n\n### Docker\n\n- If running with Docker, do the following commands and after that, please open `localhost:8080` in your browser or run the provided integration tests with `make e2e`.\n\n```bash\n# Build and start\ndocker build . -t expert-systems:latest # choose either this or the below one\ndocker build . -t expert-systems:latest --build-arg GO_ENV=production # if you want HTTPS with 'X-Forwarded-Proto' header, some services like Heroku use this for HTTPS\ndocker run --name expert-systems -d -p 8080:8080 expert-systems:latest\n\n# Remove image for cleanup\ndocker stop expert-systems\ndocker rm expert-systems\ndocker image rm expert-systems:latest\n```\n\n## Deployment\n\nGitHub Actions has been set up in this repository to automatically test and deploy the production version of the application to [Heroku](https://www.heroku.com/). The Go application will serve the React frontend for simplicity, and the whole application is wrapped in a Docker container to ensure consistent builds and deployments.\n\n## License\n\nThis application is open sourced under MIT License. The research paper itself will follow the license of the publisher after it has been published.\n\n## Acknowledgements\n\nWe would like to acknowledge these sources of helpful information for they have helped us during the research process.\n\n- Doctor Maria from Halodoc who had reviewed this application.\n- Doctor Devi from Halodoc who had reviewed this application.\n- Segun Adebayo for ChakraUI.\n- Peter Kieltyka for Chi web framework.\n- Kamijin Fanta for React Icons.\n- i18next for the internationalization library.\n- All testers of the system, who have spent their time evaluating, giving feedback, and helping us to improve this system to be a better one.\n- The anonymous reviewer(s) of this paper, who have provided valuable comments and corrections.\n\n## References\n\nThe bibliography of our research can be seen in our research paper after it has been published.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flauslim12%2Fexpert-systems","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flauslim12%2Fexpert-systems","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flauslim12%2Fexpert-systems/lists"}