From 4cc1b1b3fdc3a2096fa27c77999253996640a152 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=BDiga=20Mrzljak?= Date: Tue, 15 Jul 2025 19:42:09 +0200 Subject: [PATCH 1/3] Fix toLowerCase error for undefined --- public/projects.json | 8 ++++---- src/components/Filters.tsx | 1 + src/components/ProjectDialog.tsx | 9 +++++---- src/components/ProjectList.tsx | 2 +- src/generate-projects-json.mjs | 2 +- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/public/projects.json b/public/projects.json index 9e03de98..37f23ac9 100644 --- a/public/projects.json +++ b/public/projects.json @@ -1776,7 +1776,7 @@ "dev.bo": "https://github.com/devdotbo" } ], - "description": "NYAnCAT: The cutest and sharpest AI personal banking cat that brings you\nlow-risk returns\n\nNYAnCAT is a World APP Mini App that can serve four roles: AI banking advisor,\nfund manager, AI news source, and governance tool.\n\n-As a personal banking AI advisor, it can use ML to search for low-risk\ninvestment opportunities on CEXs.\n\n-As a fund manager, it can execute strategies and collect revenues.\n\n-As an AI news source, it can collect the latest market trends and present\nthem to you in a few words.\n\n-As a governance tool, you can use it to vote for your favourite strategies. \n\nCheck out more on the hackathon's [project page](https://ethglobal.com/showcase/nyancat-p11d3).\n", + "description": "NYAnCAT: The cutest and sharpest AI personal banking cat that brings you\nlow-risk returns\n\nNYAnCAT is a World APP Mini App that can serve four roles: AI banking advisor,\nfund manager, AI news source, and governance tool.\n\n- As a personal banking AI advisor, it can use ML to search for low-risk\n investment opportunities on CEXs.\n\n- As a fund manager, it can execute strategies and collect revenues.\n\n- As an AI news source, it can collect the latest market trends and present\n them to you in a few words.\n\n- As a governance tool, you can use it to vote for your favourite strategies. \n\nCheck out more on the hackathon's [project page](https://ethglobal.com/showcase/nyancat-p11d3).\n", "paratimes": [ "sapphire" ], @@ -2719,7 +2719,7 @@ "Mattia Careddu": "https://github.com/iskyd" } ], - "description": "Trustless fair-play gambling using TEE and Oasis Sapphire — no cheating, just\nthe game\n\nTR.I.G.O. (Trustless Implementation of Gambling Online) is a blockchain-based\nframework that ensures fairness and transparency in online gambling. It\naddresses the critical issue of trust in digital casinos, where players\ncurrently have no guarantee that games are not rigged or manipulated by the\nhouse.\n\nBy leveraging Oasis Sapphire, a privacy-focused blockchain platform that\nintegrates Trusted Execution Environments (TEE), and ROFL, an EVM-compatible\nchain supporting verifiable randomness and confidential smart contracts,\nTR.I.G.O. eliminates the possibility of tampering, peeking, or cheating by\ncentralized operators.\n\nCheck·out·more·on·the·hackathon's·[project·page](https://ethglobal.com/showcase/trigo-g71xa).\n", + "description": "Trustless fair-play gambling using TEE and Oasis Sapphire — no cheating, just\nthe game\n\nTR.I.G.O. (Trustless Implementation of Gambling Online) is a blockchain-based\nframework that ensures fairness and transparency in online gambling. It\naddresses the critical issue of trust in digital casinos, where players\ncurrently have no guarantee that games are not rigged or manipulated by the\nhouse.\n\nBy leveraging Oasis Sapphire, a privacy-focused blockchain platform that\nintegrates Trusted Execution Environments (TEE), and ROFL, an EVM-compatible\nchain supporting verifiable randomness and confidential smart contracts,\nTR.I.G.O. eliminates the possibility of tampering, peeking, or cheating by\ncentralized operators.\n\nCheck out more on the hackathon's [project page](https://ethglobal.com/showcase/trigo-g71xa).\n", "paratimes": [ "sapphire" ], @@ -2855,7 +2855,7 @@ "protocolwhisper.eth": "https://github.com/protocolwhisper" } ], - "description": "Trusted Rust compiler that uploads encrypted projects to Walrus storage \n\nIs a secure Rust compiler system that enables privacy-preserving code\nexecution through decentralized storage. The system works by uploading\nencrypted Rust projects (packaged as tar.gz files) to Walrus decentralized\nstorage, where they receive a unique blob ID. Users can then retrieve these\nencrypted projects using the blob ID and execute them in an isolated\nenvironment, maintaining source code confidentiality throughout the entire\nprocess. The system integrates with ROFL (TEEs) on the Oasis Sapphire testnet\nfor confidential computing capabilities, allowing developers to compile and\nrun Rust code without exposing their intellectual property. While currently\nsupporting only Rust, the goal is to expand support to multiple programming\nlanguages in the future.\n\nWe first use TEEs (Trusted Execution Environments) as secure enclaves provided\nby Oasis, and therefore we put a Rust compiler inside them for having\nattestation and to be sure that this is being executed in a secure\nenvironment. For providing the Rust projects, we used Walrus for encrypting\nthem, achieving that only the TEE will know the code and it can't be extracted\nfrom it\n\nCheck·out·more·on·the·hackathon's·[project·page](https://ethglobal.com/showcase/walrustee-ug3rc).\n", + "description": "Trusted Rust compiler that uploads encrypted projects to Walrus storage \n\nIs a secure Rust compiler system that enables privacy-preserving code\nexecution through decentralized storage. The system works by uploading\nencrypted Rust projects (packaged as tar.gz files) to Walrus decentralized\nstorage, where they receive a unique blob ID. Users can then retrieve these\nencrypted projects using the blob ID and execute them in an isolated\nenvironment, maintaining source code confidentiality throughout the entire\nprocess. The system integrates with ROFL (TEEs) on the Oasis Sapphire testnet\nfor confidential computing capabilities, allowing developers to compile and\nrun Rust code without exposing their intellectual property. While currently\nsupporting only Rust, the goal is to expand support to multiple programming\nlanguages in the future.\n\nWe first use TEEs (Trusted Execution Environments) as secure enclaves provided\nby Oasis, and therefore we put a Rust compiler inside them for having\nattestation and to be sure that this is being executed in a secure\nenvironment. For providing the Rust projects, we used Walrus for encrypting\nthem, achieving that only the TEE will know the code and it can't be extracted\nfrom it\n\nCheck out more on the hackathon's [project page](https://ethglobal.com/showcase/walrustee-ug3rc).\n", "paratimes": [ "sapphire" ], @@ -2892,7 +2892,7 @@ "Albert_Cheng": "https://github.com/cheng-chun-yuan" } ], - "description": "Telegram bot leveraging ROFL to store keys, judge, and distribute rewards\n\nYap2Win: First AI-Powered Blockchain Telegram Bot\n\nWhat It Is\n\nYap2Win is the first AI-powered Telegram engagement platform that uses\nblockchain technology to fairly reward quality community contributions. It\ncombines GPT-4 content evaluation, Oasis ROFL security, and smart contract\nautomation to create trustless community rewards.\n\n\nCheck out more on the hackathon's [project page](https://ethglobal.com/showcase/yap2win-7nuo2).\n", + "description": "Telegram bot leveraging ROFL to store keys, judge, and distribute rewards\n\n\nYap2Win is the first AI-powered Telegram engagement platform that uses\nblockchain technology to fairly reward quality community contributions. It\ncombines GPT-4 content evaluation, Oasis ROFL security, and smart contract\nautomation to create trustless community rewards.\n\nCheck out more on the hackathon's [project page](https://ethglobal.com/showcase/yap2win-7nuo2).\n", "paratimes": [ "sapphire" ], diff --git a/src/components/Filters.tsx b/src/components/Filters.tsx index e8ca711f..793bf964 100644 --- a/src/components/Filters.tsx +++ b/src/components/Filters.tsx @@ -60,6 +60,7 @@ const capitalize = (str: string) => { }; const formatLicense = (license: string) => { + if (!license) return 'Unspecified'; if (license.toLowerCase() === 'mit') return 'MIT License'; if (license.toLowerCase() === 'apache-2.0') return 'Apache License 2.0'; if (license.toLowerCase() === 'gpl-3.0') return 'GNU General Public License v3.0'; diff --git a/src/components/ProjectDialog.tsx b/src/components/ProjectDialog.tsx index 627f2032..34e7c695 100644 --- a/src/components/ProjectDialog.tsx +++ b/src/components/ProjectDialog.tsx @@ -13,10 +13,11 @@ import { sanitizeUrl } from '../sanitizeUrl.mjs'; import ProjectItemLanguages from './ProjectItemLanguages'; const formatLicense = (license: string) => { - if (license === 'mit') return 'MIT License'; - if (license === 'apache-2.0') return 'Apache License 2.0'; - if (license === 'gpl-3.0') return 'GNU General Public License v3.0'; - if (license === 'bsd-3-clause') return 'BSD 3-Clause License'; + if (!license) return 'Unspecified'; + if (license.toLowerCase() === 'mit') return 'MIT License'; + if (license.toLowerCase() === 'apache-2.0') return 'Apache License 2.0'; + if (license.toLowerCase() === 'gpl-3.0') return 'GNU General Public License v3.0'; + if (license.toLowerCase() === 'bsd-3-clause') return 'BSD 3-Clause License'; return license; }; diff --git a/src/components/ProjectList.tsx b/src/components/ProjectList.tsx index 32eb8312..b9c86ae3 100644 --- a/src/components/ProjectList.tsx +++ b/src/components/ProjectList.tsx @@ -3,7 +3,7 @@ import { useMediaQuery } from '@mui/material'; import type { SelectChangeEvent } from '@mui/material/Select'; import { useTheme } from '@mui/material/styles'; import { useEffect, useState } from 'react'; -import projectsJson from '../../public/projects.json'; +import projectsJson from '../projects.json'; import { type Project, SortingOptions } from '../types'; import Filters from './Filters'; import ProjectDialog from './ProjectDialog'; diff --git a/src/generate-projects-json.mjs b/src/generate-projects-json.mjs index 76d53ae0..486d36cf 100644 --- a/src/generate-projects-json.mjs +++ b/src/generate-projects-json.mjs @@ -43,7 +43,7 @@ const projects = yamls.map((path) => { }); writeFileSync( - './public/projects.json', + './src/projects.json', JSON.stringify(projects, null, 4), 'utf8', ); From defa95fda7a5223eef850f74ba1e7986ce2b8ac4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=BDiga=20Mrzljak?= Date: Wed, 16 Jul 2025 17:30:11 +0200 Subject: [PATCH 2/3] Fix /public/projects.json import --- src/components/ProjectList.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ProjectList.tsx b/src/components/ProjectList.tsx index b9c86ae3..32eb8312 100644 --- a/src/components/ProjectList.tsx +++ b/src/components/ProjectList.tsx @@ -3,7 +3,7 @@ import { useMediaQuery } from '@mui/material'; import type { SelectChangeEvent } from '@mui/material/Select'; import { useTheme } from '@mui/material/styles'; import { useEffect, useState } from 'react'; -import projectsJson from '../projects.json'; +import projectsJson from '../../public/projects.json'; import { type Project, SortingOptions } from '../types'; import Filters from './Filters'; import ProjectDialog from './ProjectDialog'; From 79b75e826a448bf2b0d5b0625883db0727ca140d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=BDiga=20Mrzljak?= Date: Thu, 17 Jul 2025 13:53:28 +0200 Subject: [PATCH 3/3] Update writeFileSync() call --- src/generate-projects-json.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generate-projects-json.mjs b/src/generate-projects-json.mjs index 486d36cf..76d53ae0 100644 --- a/src/generate-projects-json.mjs +++ b/src/generate-projects-json.mjs @@ -43,7 +43,7 @@ const projects = yamls.map((path) => { }); writeFileSync( - './src/projects.json', + './public/projects.json', JSON.stringify(projects, null, 4), 'utf8', );