{"title": "Gitcoin Grants Data Portal", "logoImg": "bafkreic26oesr3ssvzdsm5elluyx57244r64gbkkylsdof47grbm2lbwp4", "website": "https://github.com/davidgasquez/gitcoin-grants-data-portal", "bannerImg": "bafkreie5xoawugzwttopfrn25jxdtcyoa2o55mvkbk4ixsluvbwlqeezdq", "createdAt": 1696239037350, "userGithub": "davidgasquez", "credentials": {"github": {"type": ["VerifiableCredential"], "proof": {"jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..a_qpFYyeaC_3BuDEnrbHZE9mHlOAaEsv4eVdTMOda7AeL9CeckEe39sraNUbfdo6vbJyD6gxC3nFk60nYFu-Dg", "type": "Ed25519Signature2018", "created": "2023-10-30T15:48:44.737Z", "proofPurpose": "assertionMethod", "verificationMethod": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC#z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC"}, "issuer": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC", "@context": ["https://www.w3.org/2018/credentials/v1"], "issuanceDate": "2023-10-30T15:48:44.737Z", "expirationDate": "2024-01-28T15:48:44.737Z", "credentialSubject": {"id": "did:pkh:eip155:1:0xb9ecee9a0e273d8A1857F3B8EeA30e5dD3cb6335", "hash": "v0.0.0:7OJuleyK9ljLn31qaEoxf5TXLG1fwCor5GZWVDlIgH0=", "@context": [{"hash": "https://schema.org/Text", "provider": "https://schema.org/Text"}], "provider": "ClearTextGithubOrg#datonic#1682202"}}, "twitter": {"type": ["VerifiableCredential"], "proof": {"jws": "eyJhbGciOiJFZERTQSIsImNyaXQiOlsiYjY0Il0sImI2NCI6ZmFsc2V9..9vDqkqq4KvTUoXVsWdhlu6ErCbGAL8O0_25Cs3dQofraXski75Z2ab0ZH6xpjmWcc-VI7eTfsIixYemXEcfkBw", "type": "Ed25519Signature2018", "created": "2023-10-02T09:28:31.002Z", "proofPurpose": "assertionMethod", "verificationMethod": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC#z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC"}, "issuer": "did:key:z6MkghvGHLobLEdj1bgRLhS4LPGJAvbMA1tn2zcRyqmYU5LC", "@context": ["https://www.w3.org/2018/credentials/v1"], "issuanceDate": "2023-10-02T09:28:31.002Z", "expirationDate": "2023-12-31T09:28:31.002Z", "credentialSubject": {"id": "did:pkh:eip155:1:0xb9ecee9a0e273d8A1857F3B8EeA30e5dD3cb6335", "hash": "v0.0.0:HlYB0WejK8Jr5W/vLoUSxeVzomfZ019AjM3ZoKe65iA=", "@context": [{"hash": "https://schema.org/Text", "provider": "https://schema.org/Text"}], "provider": "ClearTextTwitter#davidgasquez"}}}, "description": "Open source, serverless, and local-first data hub for Gitcoin Grants data to improve data access and empower data scientists to conduct research and guide community driven analysis and decisions.\n\nThe Gitcoin Data Portal proof of concept repository contains code and artifacts to help process Gitcoin Grants data from the [Allo Indexer Data API](https://indexer-grants-stack.gitcoin.co/data/). It is an instance of [Datadex](https://github.com/davidgasquez/datadex) allowing you and everyone else to:\n\n- Add new data sources to the portal, collaborate on better models (ala Dune) or submit an interesting analysis.\n- All in a permissionless way. Don't ask, fork it and improve the models, add a new source or update any script.\n- Declarative stateless transformations tracked in git, executed in GitHub Actions and published to IPFS. Data, artifacts (like the entire DuckDB database), and models all version controlled.\n- Share and explore dashboards and report with the world!\n\n### 📦 Key Features\n\n- **Open**.\n  - Both code and data are fully open source.\n  - Also relies on open standards/formats (Arrow ecosystem).\n- **Permissionless**.\n  - Clone and edit things away! You're not blocked by any API rate limits, or closed data like in Dune.\n  - All other git features like branching, merging, pull requests, ... are available because all the data is transformed declaratively as code.\n- **Decentralized**.\n  - The project runs on a laptop, a server, a CI runner (that's the way is working right now) or a even decentralized compute network like [Bacalhau](https://www.bacalhau.org/). Oh, it even works in GitHub Codespaces so you don't even need to setup anything locally!\n  - Data is stored in IPFS. You can run it locally, and it'll generate the same IPFS files if nothing has changed. The more people runst it, the more distributed the IPFS files will be!\n  - Data comes from multiple sources and can be exposed in multiple ways.\n- **Data as Code**.\n  - Every commit generates all the table files and pushes them to IPFS. This means that we can always go back in time and see the data as it was at that point in time. For every commit, we'll have the data as it was at that point in time.\n- **Modular**.\n  - Each component can be replaced, extended, or removed. Works well in many environments (your laptop, in a cluster, or from the browser), and with multiple tools (tables are files at the end of the day).\n- **Low Friction**.\n  - Data (raw and processed) is already there! No need to write your own scripts. You can always reproduce it but getting started is as easy as pasting [a SQL query in your browser](https://shell.duckdb.org/) or doing `pd.read_parquet(url)` in a Notebook.\n  - Every commit will also publish a set of Quarto Notebooks with the data. Could be used to generate reports/dahsboards, or as documentation.\n- **Modern**\n  - It supports all the cool things data engineers want; typing, tests, materialized views, dev branches, ...\n  - Uses best practices (declarative transformations) and state of the art tooling (DuckDB).\n\nThat's it! As an example, you can go to [the generated website with some query examples](https://bafybeieaztvldk23xghlpmzjz5ppry5jrd6bi2kag6q73huckhfrlrabby.ipfs.dweb.link/) or run the following query (rounds by most votes) in [shell.duckdb.org](https://shell.duckdb.org/).\n\n```sql\nselect\n    round_id,\n    count(id)\nfrom read_parquet('https://bafybeieaztvldk23xghlpmzjz5ppry5jrd6bi2kag6q73huckhfrlrabby.ipfs.w3s.link/round_votes.parquet')\ngroup by 1 order by 2 desc limit 10;\n```\n\n![DuckDB Example](https://user-images.githubusercontent.com/1682202/267361009-a416610e-3905-4399-adac-5d395975c2e5.png)\n", "logoImgData": {}, "bannerImgData": {}, "projectGithub": "datonic", "projectTwitter": "davidgasquez"}