{"id":42334895,"url":"https://github.com/datacite/akita","last_synced_at":"2026-04-14T14:01:09.624Z","repository":{"id":37977798,"uuid":"261272436","full_name":"datacite/akita","owner":"datacite","description":"DataCite Commons","archived":false,"fork":false,"pushed_at":"2026-04-14T08:49:15.000Z","size":6613,"stargazers_count":6,"open_issues_count":29,"forks_count":3,"subscribers_count":6,"default_branch":"master","last_synced_at":"2026-04-14T10:26:19.623Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://commons.datacite.org","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/datacite.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":"codemeta.json","zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-05-04T19:07:29.000Z","updated_at":"2026-04-14T08:47:34.000Z","dependencies_parsed_at":"2024-02-06T13:12:40.043Z","dependency_job_id":"b08bea9d-3d69-4bba-be63-1aef70b5cfc3","html_url":"https://github.com/datacite/akita","commit_stats":null,"previous_names":[],"tags_count":181,"template":false,"template_full_name":null,"purl":"pkg:github/datacite/akita","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datacite%2Fakita","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datacite%2Fakita/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datacite%2Fakita/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datacite%2Fakita/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/datacite","download_url":"https://codeload.github.com/datacite/akita/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/datacite%2Fakita/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31799411,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5: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-01-27T14:14:54.625Z","updated_at":"2026-04-14T14:01:09.612Z","avatar_url":"https://github.com/datacite.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Akita\n[![Identifier](https://img.shields.io/badge/doi-10.14454%2Fqgk4--zs88-fca709.svg)](https://doi.org/10.14454/qgk4-zs88)\n![Release](https://github.com/datacite/akita/workflows/Release/badge.svg)\n[![Maintainability](https://api.codeclimate.com/v1/badges/b34c0096505296b18f19/maintainability)](https://codeclimate.com/github/datacite/akita/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/b34c0096505296b18f19/test_coverage)](https://codeclimate.com/github/datacite/akita/test_coverage)\n[![akita](https://img.shields.io/endpoint?url=https://dashboard.cypress.io/badge/detailed/yur1cf/master\u0026style=flat\u0026logo=cypress)](https://dashboard.cypress.io/projects/yur1cf/runs)\n\n\n## Introduction\n\nAkita is the web frontend for **[DataCite Commons](https://commons.datacite.org)**, a discovery service that connects research outputs, people, and organizations. It provides a unified search interface to explore the research landscape using persistent identifiers (PIDs).\n\nKey features include:\n*   **Works Search**: Discover research outputs (datasets, software, text, etc.) via DOIs.\n*   **People Search**: Find researchers and their contributions via ORCID IDs.\n*   **Organization Search**: Explore research institutions and their outputs via ROR IDs.\n*   **Repository Search**: Find data repositories via DataCite Client IDs and re3data IDs.\n*   **Visualization**: View connections and statistics related to research entities.\n\n## Tech Stack\n\n*   **Frontend:** [Next.js](https://nextjs.org/) (React framework), [Apollo Client](https://www.apollographql.com/docs/react/) (GraphQL), [React Bootstrap](https://react-bootstrap.github.io/) (UI components).\n*   **Backend:** [Flask](https://flask.palletsprojects.com/) (Python microframework) for specific API endpoints.\n*   **Testing:** [Cypress](https://www.cypress.io/) (End-to-End testing).\n\n## Project Structure\n\n*   `api/`: Python Flask application for backend services (e.g. related works graph).\n*   `src/`: Main source code for the Next.js frontend.\n    *   `app/`: Next.js App Router pages/routes.\n    *   `components/`: Reusable React components.\n    *   `data/`: GraphQL queries, constants, and data fetching logic.\n*   `cypress/`: End-to-End tests.\n*   `public/`: Static assets.\n\n## Prerequisites\n\nYou will need the following things properly installed on your computer.\n\n* [Git](https://git-scm.com/)\n* [Node.js](https://nodejs.org/) (with NPM) - Suggestion is to use a version manager like [N](https://github.com/tj/n)\n* [Yarn 1 Classic](https://classic.yarnpkg.com/lang/en/)\n* [Python 3](https://www.python.org/) (with pip3)\n\n## Installation\n\n* `git clone \u003crepository-url\u003e` this repository\n* `yarn install`\n* `cp .env.example .env` (and configure environment variables as needed)\n* `pip3 install -r api/requirements.txt` (optional, handled by `yarn dev-all`)\n\n## Environment Variables\n\nThe application uses several environment variables for configuration. You can set these in a `.env` file in the root directory. A `.env.example` file is provided as a template.\n\n| Variable | Description | Default (if not set) |\n| :--- | :--- | :--- |\n| `NEXT_PUBLIC_API_URL` | DataCite API URL | `https://api.stage.datacite.org` |\n| `NEXT_PUBLIC_PROFILES_URL` | DataCite Profiles URL | `https://profiles.stage.datacite.org` |\n| `NEXT_PUBLIC_ORCID_API_URL` | ORCID API URL | `https://pub.sandbox.orcid.org/v3.0` |\n| `NEXT_PUBLIC_ID_BASE` | Base URL for DOI resolution | `https://handle.stage.datacite.org/` |\n| `NEXT_PUBLIC_GA_TRACKING_ID` | Google Analytics Tracking ID | - |\n| `SENTRY_DSN` | Sentry DSN for error tracking | - |\n| `NEXT_PUBLIC_JWT_PUBLIC_KEY` | Public key for verifying JWTs | - |\n| `NEXT_PUBLIC_FEATURE_FLAGS` | Comma-separated list of feature flags | - |\n\n## Running / Client\n\n* `yarn dev-all` (runs both Next.js frontend and Python API)\n* Visit your app at [http://localhost:3000](http://localhost:3000).\n\nNote: `yarn dev` only runs the frontend. If you need the API, use `yarn dev-all` or run `yarn api` in a separate terminal.\n\n## Running / Server\n\n* `yarn build`\n* `yarn start`\n* Visit your app at [http://localhost:3000](http://localhost:3000).\n\n### Running Tests\n\n*   `yarn cy:run`: Runs Cypress tests in headless mode.\n*   `yarn cy:open`: Opens the Cypress Test Runner for interactive testing.\n\n### Linting and Formatting\n\n*   `yarn lint`: Runs ESLint to check for code quality issues.\n*   `yarn prettier-format`: Formats code using Prettier.\n*   `yarn type-check`: Runs TypeScript compiler to check for type errors.\n\n### Deploying\n\nThe application is built and deployed using Vercel and GitHub Actions\n\n### Contributing\n\n1.  **Fork** the project.\n2.  **Create** a feature branch (`git checkout -b feature/my-new-feature`).\n3.  **Commit** your changes (`git commit -am 'Add some feature'`).\n4.  **Push** to the branch (`git push origin feature/my-new-feature`).\n5.  **Create** a new Pull Request.\n\nPlease ensure you:\n*   Write tests for new features or bug fixes.\n*   Follow the existing code style.\n*   Do not modify the `Rakefile`, version, or history files directly (if applicable).\n\n## Resources\n\n*   [DataCite Commons](https://commons.datacite.org): The live service.\n*   [DataCite API Documentation](https://support.datacite.org/docs/api-reference): Reference for the DataCite REST API.\n*   [DataCite GraphQL API Guide](https://support.datacite.org/docs/datacite-graphql-api-guide): Guide for using the DataCite GraphQL API.\n*   [DataCite Support](https://support.datacite.org/): General support documentation.\n\n## License\n**akita** is released under the [MIT License](https://github.com/datacite/akita/blob/master/LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatacite%2Fakita","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdatacite%2Fakita","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdatacite%2Fakita/lists"}