{"id":41980175,"url":"https://github.com/globus/template-data-portal","last_synced_at":"2026-01-25T23:40:51.607Z","repository":{"id":227122637,"uuid":"770486189","full_name":"globus/template-data-portal","owner":"globus","description":"A template repository that can be used to create your own serverless data portal integrating with Globus Transfer.","archived":false,"fork":false,"pushed_at":"2026-01-12T15:28:34.000Z","size":494,"stargazers_count":2,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-01-12T21:36:49.949Z","etag":null,"topics":["portal","serverless"],"latest_commit_sha":null,"homepage":"https://globus.github.io/template-data-portal/","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/globus.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-03-11T16:27:59.000Z","updated_at":"2026-01-12T15:28:31.000Z","dependencies_parsed_at":"2024-06-19T03:11:13.515Z","dependency_job_id":"632469c0-6880-4781-8ebb-92b12e4d2b94","html_url":"https://github.com/globus/template-data-portal","commit_stats":null,"previous_names":["globus/example-data-portal","globus/template-data-portal"],"tags_count":1,"template":true,"template_full_name":null,"purl":"pkg:github/globus/template-data-portal","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/globus%2Ftemplate-data-portal","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/globus%2Ftemplate-data-portal/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/globus%2Ftemplate-data-portal/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/globus%2Ftemplate-data-portal/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/globus","download_url":"https://codeload.github.com/globus/template-data-portal/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/globus%2Ftemplate-data-portal/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28761816,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T23:06:19.311Z","status":"ssl_error","status_checked_at":"2026-01-25T23:03:50.555Z","response_time":113,"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":["portal","serverless"],"created_at":"2026-01-25T23:40:51.551Z","updated_at":"2026-01-25T23:40:51.601Z","avatar_url":"https://github.com/globus.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://github.com/globus/template-data-portal/assets/694253/8c55d1e3-1ecd-47ea-8288-73c79cd2c953\" height=\"100px\" alt=\"Globus\" /\u003e\n   \u003cbr/\u003e\n  \u003cstrong\u003e🧪 BETA 🧪\u003c/strong\u003e\n  \u003cbr/\u003e\n  \u003cstrong\u003eThis is template repository used to generate a Globus-powered research data portal.\u003c/strong\u003e\n  \u003cbr/\u003e\n\u003c/p\u003e\n\n----\n\nView the result at: [globus.github.io/template-data-portal](https://globus.github.io/template-data-portal).\n\nWhile this repository is a working example of a data portal, it is also a template for [creating your own static research data portal](#creating-your-own-static-research-data-portal).\n\n----\n\n# Features + Functionality\n\n## Data Portal\n\n- **Powered by [Globus](https://www.globus.org/)**\n- List the directory contents of a configured Globus collection at a specific path.\n  - Support for [HTTPS Access](https://docs.globus.org/globus-connect-server/v5.4/https-access-collections/) download of files where available.\n- Transfer data from the configured collection to another Globus collection.\n- Configure multiple collections and paths allowing users to select their preferred source.\n- Ability to host custom content alongside the data portal.\n\n## GitHub Repository\n\n- 📄 **Hosted via GitHub Pages** – Users can access your data portal at this repository's GitHub Pages URL. Use all the functionality built-in to GitHub pages to suit your needs, including [configuring a custom domain](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/about-custom-domains-and-github-pages).\n\n- 🚀 **Automated Deployments via GitHub Actions** – Any file changes will result in the deployment (and rebuild) of your data portal.\n   - You can manually trigger a deployment by navigating to the **Actions** tab and selecting the **static** workflow.\n   \n- 🤖 **Dependabot** – A default [Dependabot](https://docs.github.com/en/code-security/dependabot) configuration ([`.github/dependabot.yml`](.github/dependabot.yml)) to keep your repository up-to-date with latest changes to [globus/static-data-portal](https://github.com/globus/static-data-portal).\n\n\n----\n\n### Creating Your Own Research Data Portal\n\n1. Create a new repository from the [globus/template-data-portal](https://github.com/globus/template-data-portal) template.\n   * Using the following URL: https://github.com/new?template_name=template-data-portal\u0026template_owner=globus\n   * Or, using the GitHub UI: \u003cimg width=\"188\" alt=\"Screenshot 2024-03-11 at 12 24 22 PM\" src=\"https://github.com/globus/template-data-portal/assets/694253/abffa5a5-86c8-47d9-be4b-f249d34505ab\"\u003e\n1. [Update your repository to allow publishing with GitHub Actions](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site#publishing-with-a-custom-github-actions-workflow).\n   - **IMPORTANT** The built-in GitHub Action workflows in your new repository will fail until you've updated this setting.\n1. [Ensure your GitHub Pages are configured to Enforce HTTPS](https://docs.github.com/en/pages/getting-started-with-github-pages/securing-your-github-pages-site-with-https)\n1. Register an application on Globus – https://app.globus.org/settings/developers\n   * You'll be creating an OAuth public client; This option is presented as _\"Register a thick client or script that will be installed and run by users on their devices\"_.\n   * Update the **Redirects** to include your GitHub Pages URL + `/authenticate`, i.e., `https://{username}.github.io/{repository}/authenticate`\n     * If you have [configured your GitHub Pages to use a custom domain](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site), this will be `https://{domain}/authenticate`\n     * It is important to note that Globus Auth **requires HTTPS**.\n   * Optional: Specify the **Privacy Policy URL** and **Terms \u0026 Conditions URL** to the portal-provided routes, i.e. `https://globus.github.io/example-data-portal/privacy-policy`\n   * All other fields can be left as default or changed to suit your needs.\n1. Update the `static.json` to include:\n   * `data.attributes.globus.application.client_id` – The UUID of the client created in **the previous step**.\n   * `data.attributes.globus.transfer.collection_id` – The Collection UUID that will be the \"source\" of your data portal.\n   * Optional: Set the `data.attributes.globus.transfer.path` to a specific path within the collection, or remove the `path` property to resolve to the default directory.\n   * See the [static.json](#staticjson) type definitions for more configuration options.\n1. **That's it!** Your portal will be available at your GitHub Pages URL. The changes made (and any future changes) to the `static.json` will trigger a GitHub Action that will automatically build and deploy your research data portal to your GitHub Pages URL.\n\n### Maintaining Your Data Portal\n\n- As you make changes to files in your repository, the GitHub Action will automatically rebuild and deploy your portal.\n- Globus will provide updates to the underlying `@globus/static-data-portal` package that powers your portal. Merging pull requests automatically opened from Dependabot will keep your portal up-to-date with the latest changes.\n\n#### Common Changes after Creating Your Portal\n\n- **Updating the Title** – Update the `data.attributes.content.title` in the `static.json`.\n- **Adding Custom Content** - Add a `content` directory with Markdown, or [MDX](https://mdxjs.com/) files to be rendered as pages in your portal.\n- **Edit/Remove the `CITATION` file** – Update the [`CITATION.cff`](CITATION.cff) file to reflect the appropriate citation information for your research data portal – [learn more about `CITATION` files](https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-citation-files).\n- **Removing this section of the README** – Remove this section from the `README.md` file or update the README to meet your needs.\n\n----\n\n### `static.json`\n\nThe type used for `data` by the [@globus/static-data-portal generator](https://github.com/globus/static-data-portal).\n\n#### Type declaration\n\n| Name | Type | Description |\n| :------ | :------ | :------ |\n| `attributes` | \\{ `content`: \\{ `image?`: `string` ; `privacy_policy?`: `string` ; `tagline?`: `string` ; `terms_of_service?`: `string` ; `title`: `string`  } ; `globus`: \\{ `application`: \\{ `client_id`: `string` ; `redirect_uri?`: `string`  } ; `transfer`: \\{ `collection_id`: `string` ; `path?`: `string`  }  } ; `theme?`: `ThemeSettings`  } | - |\n| `attributes.content` | \\{ `image?`: `string` ; `privacy_policy?`: `string` ; `tagline?`: `string` ; `terms_of_service?`: `string` ; `title`: `string`  } | - |\n| `attributes.content.image?` | `string` | The URL of the portal's header image. |\n| `attributes.content.privacy_policy?` | `string` | A privacy policy to be rendered at `/privacy-policy`. This is especially useful for associating the published URL with your registered Globus Auth application. |\n| `attributes.content.tagline?` | `string` | - |\n| `attributes.content.terms_of_service?` | `string` | Terms and conditions to be rendered at `/terms-and-conditions`. This is especially useful for associating the published URL with your registered Globus Auth application. |\n| `attributes.content.title` | `string` | The title of the research data portal. |\n| `attributes.globus` | \\{ `application`: \\{ `client_id`: `string` ; `redirect_uri?`: `string`  } ; `transfer`: \\{ `collection_id`: `string` ; `path?`: `string`  }  } | - |\n| `attributes.globus.application` | \\{ `client_id`: `string` ; `redirect_uri?`: `string`  } | Information about your registered Globus Auth Application (Client) **`See`** https://docs.globus.org/api/auth/developer-guide/#developing-apps |\n| `attributes.globus.application.client_id` | `string` | The UUID of the client application. |\n| `attributes.globus.application.redirect_uri?` | `string` | The redirect URI for the Globus Auth login page to complete the OAuth2 flow. The portal will make a reasonable effort to determine this URI, but this field is provided as a fallback. To use the portal's built-in authorization handling, redirects should be sent to `/authenticate` on the host. **`Example`** ```ts \"https://example.com/data-portal/authenticate\" ``` |\n| `attributes.globus.transfer` | \\{ `collection_id`: `string` ; `path?`: `string`  } | Configuration for Transfer-related functionality in the portal. |\n| `attributes.globus.transfer.collection_id` | `string` | The UUID of the Globus collection to list and transfer files from. |\n| `attributes.globus.transfer.path?` | `string` | The path on the collection to list and transfer files from. |\n| `attributes.theme?` | `ThemeSettings` | - |\n| `version` | `string` | The version of the `data` object, which is used to determine how the generator will render its `attributes`. **`Example`** ```ts \"1.0.0\" ``` |\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglobus%2Ftemplate-data-portal","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fglobus%2Ftemplate-data-portal","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fglobus%2Ftemplate-data-portal/lists"}