Compare commits

...

18 Commits

Author SHA1 Message Date
Austin Chen
c4cc2f3762 Script to resolve all markets in a particular group 2022-09-09 14:03:14 -07:00
Austin Chen
064c6d7575 Repurpose scraper and upload script for Criticism and Red Teaming contest 2022-08-31 22:03:59 -07:00
Austin Chen
6095263813 Move puppeteer to dev-dependency 2022-08-29 13:49:55 -07:00
Austin Chen
232bc55a47 Run market maker in prod 2022-08-26 09:15:05 -07:00
Austin Chen
f48cae1df3 Rerun scraper 2022-08-26 09:02:42 -07:00
Austin Chen
ef5b0807f5 Update script to upload all submissions 2022-08-25 10:39:01 -07:00
Austin Chen
75e05c5bf7 Fix indentation 2022-08-25 09:51:52 -07:00
Austin Chen
22aab28e80 Rerun scraper 2022-08-25 09:50:47 -07:00
Austin Chen
f3ef244422 Rerun scraper 2022-08-23 10:46:59 -07:00
Austin Chen
9e6c9a088c Create a CEP market via script 2022-08-22 19:06:52 -07:00
Austin Chen
a4fb6a847c Rescrape Cause Exploration Prizes 2022-08-22 17:37:56 -07:00
Austin Chen
e608f552f1 Clean up typescript errors 2022-08-22 17:37:40 -07:00
ingawei
ad7827f2f1 added files 2022-08-08 12:45:01 -07:00
ingawei
7db3497bbe all the things 2022-08-08 12:32:10 -07:00
ingawei
6382759e27 added scraping 2022-08-04 04:16:41 -07:00
ingawei
710a5afdac working contest page 2022-08-03 14:58:16 -07:00
ingawei
e312f799f9 more contest changes 2022-08-03 14:09:55 -07:00
ingawei
04da05a47c added new files 2022-08-02 01:36:43 -07:00
25 changed files with 4845 additions and 25 deletions

22
common/contest.ts Normal file
View File

@ -0,0 +1,22 @@
type Contest = {
link: string
description: string
submissionLink: string
fileName: string
closeTime: string
}
export const CONTEST_DATA: { [name: string]: Contest } = {}
CONTEST_DATA['cause-exploration-prize'] = {
link: 'https://www.causeexplorationprizes.com/',
description:
'Open Philanthropys contest to find ideas for the best ways to use their resources, with focus on new areas to support, health development, and worldview investigations.',
submissionLink:
'https://forum.effectivealtruism.org/topics/cause-exploration-prizes',
//name of file that stores json of submissions under lib/util/contests
fileName: 'causeExploration',
closeTime: '2022-09-01',
}
export const CONTEST_SLUGS = Object.keys(CONTEST_DATA)

View File

@ -31,6 +31,8 @@
"@tiptap/extension-link": "2.0.0-beta.43",
"@tiptap/extension-mention": "2.0.0-beta.102",
"@tiptap/starter-kit": "2.0.0-beta.190",
"@types/cheerio": "^0.22.31",
"cheerio": "1.0.0-rc.12",
"cors": "2.8.5",
"express": "4.18.1",
"firebase-admin": "10.0.0",
@ -44,7 +46,8 @@
"devDependencies": {
"@types/mailgun-js": "0.22.12",
"@types/module-alias": "2.0.1",
"firebase-functions-test": "0.3.3"
"firebase-functions-test": "0.3.3",
"puppeteer": "17.0.0"
},
"private": true
}

View File

@ -0,0 +1,114 @@
// Run with `npx ts-node src/scripts/contest/create-markets.ts`
import { data } from './criticism-and-red-teaming'
// Dev API key for Cause Exploration Prizes (@CEP)
// const API_KEY = '188f014c-0ba2-4c35-9e6d-88252e281dbf'
// DEV API key for Criticism and Red Teaming (@CARTBot)
const API_KEY = '6ff1f78a-32fe-43b2-b31b-9e3c78c5f18c'
type CEPSubmission = {
title: string
author: string
link: string
}
// Use the API to create a new market for this Cause Exploration Prize submission
async function postMarket(submission: CEPSubmission) {
const { title, author } = submission
const response = await fetch('https://dev.manifold.markets/api/v0/market', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Key ${API_KEY}`,
},
body: JSON.stringify({
outcomeType: 'BINARY',
question: `"${title}" by ${author}`,
description: makeDescription(submission),
closeTime: Date.parse('2022-09-08').valueOf(),
initialProb: 10,
// Super secret options:
// groupId: 'y2hcaGybXT1UfobK3XTx', // [DEV] CEP Tournament
groupId: 'h3MhjYbSSG6HbxY8ZTwE', // [DEV] CART
// groupId: 'cMcpBQ2p452jEcJD2SFw', // [PROD] Predict CEP
visibility: 'unlisted',
// TODO: Increase liquidity?
}),
})
const data = await response.json()
console.log('Created market:', data.slug)
}
async function postAll() {
for (const submission of data.slice(2, 5)) {
await postMarket(submission)
}
}
postAll()
/* Example curl request:
$ curl https://manifold.markets/api/v0/market -X POST -H 'Content-Type: application/json' \
-H 'Authorization: Key {...}'
--data-raw '{"outcomeType":"BINARY", \
"question":"Is there life on Mars?", \
"description":"I'm not going to type some long ass example description.", \
"closeTime":1700000000000, \
"initialProb":25}'
*/
function makeDescription(submission: CEPSubmission) {
const { title, author, link } = submission
return {
content: [
{
content: [
{ text: `Will ${author}'s post "`, type: 'text' },
{
marks: [
{
attrs: {
target: '_blank',
href: link,
class:
'no-underline !text-indigo-700 z-10 break-words hover:underline hover:decoration-indigo-400 hover:decoration-2',
},
type: 'link',
},
],
type: 'text',
text: title,
},
{ text: '" win or be a runner-up in the ', type: 'text' },
{
text: 'EA Criticism and Red Teaming Contest',
type: 'text',
marks: [
{
attrs: {
target: '_blank',
class:
'no-underline !text-indigo-700 z-10 break-words hover:underline hover:decoration-indigo-400 hover:decoration-2',
href: 'https://forum.effectivealtruism.org/posts/8hvmvrgcxJJ2pYR4X/announcing-a-contest-ea-criticism-and-red-teaming',
},
type: 'link',
},
],
},
{ text: '?', type: 'text' },
],
type: 'paragraph',
},
{ type: 'paragraph' },
{
type: 'iframe',
attrs: {
allowfullscreen: true,
src: link,
frameborder: 0,
},
},
],
type: 'doc',
}
}

View File

@ -0,0 +1,697 @@
export const data = [
{
"title": "Announcing a contest: EA Criticism and Red Teaming",
"author": "Lizka",
"link": "https://forum.effectivealtruism.org/posts/8hvmvrgcxJJ2pYR4X/announcing-a-contest-ea-criticism-and-red-teaming"
},
{
"title": "Pre-announcing a contest for critiques and red teaming",
"author": "Lizka",
"link": "https://forum.effectivealtruism.org/posts/Fx8pWSLKGwuqsfuRQ/pre-announcing-a-contest-for-critiques-and-red-teaming"
},
{
"title": "Deworming and decay: replicating GiveWells cost-effectiveness analysis ",
"author": "JoelMcGuire",
"link": "https://forum.effectivealtruism.org/posts/MKiqGvijAXfcBHCYJ/deworming-and-decay-replicating-givewell-s-cost"
},
{
"title": "A Critical Review of Open Philanthropys Bet On Criminal Justice Reform",
"author": "NunoSempere",
"link": "https://forum.effectivealtruism.org/posts/h2N9qEbvQ6RHABcae/a-critical-review-of-open-philanthropy-s-bet-on-criminal"
},
{
"title": "Critiques of EA that I want to read",
"author": "abrahamrowe",
"link": "https://forum.effectivealtruism.org/posts/n3WwTz4dbktYwNQ2j/critiques-of-ea-that-i-want-to-read"
},
{
"title": "Resource for criticisms and red teaming",
"author": "Lizka",
"link": "https://forum.effectivealtruism.org/posts/uuQDgiJJaswEyyzan/resource-for-criticisms-and-red-teaming"
},
{
"title": "Leaning into EA Disillusionment",
"author": "Helen",
"link": "https://forum.effectivealtruism.org/posts/MjTB4MvtedbLjgyja/leaning-into-ea-disillusionment"
},
{
"title": "A philosophical review of Open Philanthropys Cause Prioritisation Framework",
"author": "MichaelPlant",
"link": "https://forum.effectivealtruism.org/posts/bdiDW83SFAsoA4EeB/a-philosophical-review-of-open-philanthropy-s-cause"
},
{
"title": "The Future Might Not Be So Great",
"author": "Jacy",
"link": "https://forum.effectivealtruism.org/posts/WebLP36BYDbMAKoa5/the-future-might-not-be-so-great"
},
{
"title": "Potatoes: A Critical Review",
"author": "Pablo Villalobos",
"link": "https://forum.effectivealtruism.org/posts/iZrrWGvx2s2uPtica/potatoes-a-critical-review"
},
{
"title": "Enlightenment Values in a Vulnerable World",
"author": "Maxwell Tabarrok",
"link": "https://forum.effectivealtruism.org/posts/A4fMkKhBxio83NtBL/enlightenment-values-in-a-vulnerable-world"
},
{
"title": "How EA is perceived is crucial to its future trajectory",
"author": "GidonKadosh",
"link": "https://forum.effectivealtruism.org/posts/82ig8odF9ooccfJfa/how-ea-is-perceived-is-crucial-to-its-future-trajectory"
},
{
"title": "Before There Was Effective Altruism, There Was Effective Philanthropy",
"author": "ColdButtonIssues",
"link": "https://forum.effectivealtruism.org/posts/CdrKtaAX69iJuJD2r/before-there-was-effective-altruism-there-was-effective"
},
{
"title": "A concern about the “evolutionary anchor” of Ajeya Cotras report on AI timelines.",
"author": "NunoSempere",
"link": "https://forum.effectivealtruism.org/posts/FHTyixYNnGaQfEexH/a-concern-about-the-evolutionary-anchor-of-ajeya-cotra-s"
},
{
"title": "A critical review of GiveWell's 2022 cost-effectiveness model",
"author": "Froolow",
"link": "https://forum.effectivealtruism.org/posts/6dtwkwBrHBGtc3xes/a-critical-review-of-givewell-s-2022-cost-effectiveness"
},
{
"title": "The Case for Funding New Long-Term Randomized Controlled Trials of Deworming",
"author": "MHR",
"link": "https://forum.effectivealtruism.org/posts/CyxZmwQ7gADwjBHG6/the-case-for-funding-new-long-term-randomized-controlled"
},
{
"title": "EA is becoming increasingly inaccessible, at the worst possible time",
"author": "Ann Garth",
"link": "https://forum.effectivealtruism.org/posts/duPDKhtXTJNAJBaSf/ea-is-becoming-increasingly-inaccessible-at-the-worst"
},
{
"title": "Questioning the Value of Extinction Risk Reduction",
"author": "Red Team 8",
"link": "https://forum.effectivealtruism.org/posts/eeDsHDoM9De4iGGLw/questioning-the-value-of-extinction-risk-reduction-1"
},
{
"title": "Population Ethics Without Axiology: A Framework",
"author": "Lukas_Gloor",
"link": "https://forum.effectivealtruism.org/posts/dQvDxDMyueLyydHw4/population-ethics-without-axiology-a-framework"
},
{
"title": "Are you really in a race? The Cautionary Tales of Szilárd and Ellsberg",
"author": "HaydnBelfield",
"link": "https://forum.effectivealtruism.org/posts/cXBznkfoPJAjacFoT/are-you-really-in-a-race-the-cautionary-tales-of-szilard-and"
},
{
"title": "Some concerns about policy work funding and the Long Term Future Fund",
"author": "weeatquince",
"link": "https://forum.effectivealtruism.org/posts/Xfon9oxyMFv47kFnc/some-concerns-about-policy-work-funding-and-the-long-term"
},
{
"title": "Why Effective Altruists Should Put a Higher Priority on Funding Academic Research",
"author": "Stuart Buck",
"link": "https://forum.effectivealtruism.org/posts/uTQKFNXrMXuwGe4vw/why-effective-altruists-should-put-a-higher-priority-on"
},
{
"title": "Remuneration In Effective Altruism",
"author": "Stefan_Schubert",
"link": "https://forum.effectivealtruism.org/posts/wWnRtjDiyjRRgaFDb/remuneration-in-effective-altruism"
},
{
"title": "You Don't Need To Justify Everything",
"author": "ThomasW",
"link": "https://forum.effectivealtruism.org/posts/HX9ZDGwwSxAab46N9/you-don-t-need-to-justify-everything"
},
{
"title": "EAs underestimate uncertainty in cause prioritisation",
"author": "freedomandutility",
"link": "https://forum.effectivealtruism.org/posts/Ekd3oATEZkBbJ95uD/eas-underestimate-uncertainty-in-cause-prioritisation"
},
{
"title": "Effective Altruism as Coordination & Field Incubation",
"author": "DavidNash",
"link": "https://forum.effectivealtruism.org/posts/Zm6iaaJhoZsoZ2uMD/effective-altruism-as-coordination-and-field-incubation"
},
{
"title": "EA Culture and Causes: Less is More",
"author": "Allen Bell",
"link": "https://forum.effectivealtruism.org/posts/FWHDX32ecr9aF4xKw/ea-culture-and-causes-less-is-more"
},
{
"title": "Questioning the Foundations of EA",
"author": "Wei_Dai",
"link": "https://forum.effectivealtruism.org/posts/zvNwSG2Xvy8x5Rtba/questioning-the-foundations-of-ea"
},
{
"title": "Doing good is a privilege. This needs to change if we want to do good long-term. ",
"author": "SofiaBalderson",
"link": "https://forum.effectivealtruism.org/posts/gicYG5ymk4pPzrKAd/doing-good-is-a-privilege-this-needs-to-change-if-we-want-to"
},
{
"title": "Longtermism, risk, and extinction",
"author": "Richard Pettigrew",
"link": "https://forum.effectivealtruism.org/posts/xAoZotkzcY5mvmXFY/longtermism-risk-and-extinction"
},
{
"title": "Prioritisation should consider potential for ongoing evaluation alongside expected value and evidence quality",
"author": "freedomandutility",
"link": "https://forum.effectivealtruism.org/posts/orfgdYRZXNKQtqzmh/prioritisation-should-consider-potential-for-ongoing"
},
{
"title": "“Existential Risk” is badly named and leads to narrow focus on astronomical waste",
"author": "freedomandutility",
"link": "https://forum.effectivealtruism.org/posts/qFdifovCmckujxEsq/existential-risk-is-badly-named-and-leads-to-narrow-focus-on"
},
{
"title": "How to dissolve moral cluelessness about donating mosquito nets",
"author": "ben.smith",
"link": "https://forum.effectivealtruism.org/posts/9XgLq4eQHMWybDsrv/how-to-dissolve-moral-cluelessness-about-donating-mosquito-1"
},
{
"title": "Leveraging labor shortages as a pathway to career impact",
"author": "IanDavidMoss",
"link": "https://forum.effectivealtruism.org/posts/xdMn6FeQGjrXDPnQj/leveraging-labor-shortages-as-a-pathway-to-career-impact"
},
{
"title": "Red teaming a model for estimating the value of longtermist interventions - A critique of Tarsney's \"The Epistemic Challenge to Longtermism\"",
"author": "Anjay F",
"link": "https://forum.effectivealtruism.org/posts/u9CvMCCmQRgjBD828/red-teaming-a-model-for-estimating-the-value-of-longtermist"
},
{
"title": "Earning to give should have focused more on “entrepreneurship to give”",
"author": "freedomandutility",
"link": "https://forum.effectivealtruism.org/posts/JXDi8tL6uoKPhg4uw/earning-to-give-should-have-focused-more-on-entrepreneurship"
},
{
"title": "Longtermism neglects anti-ageing research",
"author": "freedomandutility",
"link": "https://forum.effectivealtruism.org/posts/pbPmhWhGxsGSzwpNE/longtermism-neglects-anti-ageing-research"
},
{
"title": "We're funding task-adjusted survival (DALYs)",
"author": "brb243",
"link": "https://forum.effectivealtruism.org/posts/Gs8HS8QFBhtgAa8qo/we-re-funding-task-adjusted-survival-dalys"
},
{
"title": "Are we already past the precipice?",
"author": "Dem0sthenes",
"link": "https://forum.effectivealtruism.org/posts/e6prpQSojPW3jC7YD/are-we-already-past-the-precipice"
},
{
"title": "EA has a lying problem [Link Post]",
"author": "Nathan Young",
"link": "https://forum.effectivealtruism.org/posts/8dWms5YxYwZW9xneL/ea-has-a-lying-problem-link-post"
},
{
"title": "Senior EA 'ops' roles: if you want to undo the bottleneck, hire differently",
"author": "AnonymousThrowAway",
"link": "https://forum.effectivealtruism.org/posts/X8YMxbWNsF5FNaCFz/senior-ea-ops-roles-if-you-want-to-undo-the-bottleneck-hire"
},
{
"title": "On Deference and Yudkowsky's AI Risk Estimates",
"author": "Ben Garfinkel",
"link": "https://forum.effectivealtruism.org/posts/NBgpPaz5vYe3tH4ga/on-deference-and-yudkowsky-s-ai-risk-estimates"
},
{
"title": "Michael Nielsen's \"Notes on effective altruism\"",
"author": "Pablo",
"link": "https://forum.effectivealtruism.org/posts/JBAPssaYMMRfNqYt7/michael-nielsen-s-notes-on-effective-altruism"
},
{
"title": "Critique of MacAskills “Is It Good to Make Happy People?”",
"author": "Magnus Vinding",
"link": "https://forum.effectivealtruism.org/posts/vZ4kB8gpvkfHLfz8d/critique-of-macaskill-s-is-it-good-to-make-happy-people"
},
{
"title": "Prioritizing x-risks may require caring about future people",
"author": "elifland",
"link": "https://forum.effectivealtruism.org/posts/rvvwCcixmEep4RSjg/prioritizing-x-risks-may-require-caring-about-future-people"
},
{
"title": "EA Shouldn't Try to Exercise Direct Political Power",
"author": "iamasockpuppet",
"link": "https://forum.effectivealtruism.org/posts/BgNnctp6deoGdKtbr/ea-shouldn-t-try-to-exercise-direct-political-power"
},
{
"title": "Ways money can make things worse",
"author": "Jan_Kulveit",
"link": "https://forum.effectivealtruism.org/posts/YKEPXLQhYjm3nP7Td/ways-money-can-make-things-worse"
},
{
"title": "The most important climate change uncertainty",
"author": "cwa",
"link": "https://forum.effectivealtruism.org/posts/nBN6NENeudd2uJBCQ/the-most-important-climate-change-uncertainty"
},
{
"title": "Existential risk pessimism and the time of perils",
"author": "David Thorstad",
"link": "https://forum.effectivealtruism.org/posts/N6hcw8CxK7D3FCD5v/existential-risk-pessimism-and-the-time-of-perils-4"
},
{
"title": "Critique of OpenPhil's macroeconomic policy advocacy",
"author": "Hauke Hillebrandt",
"link": "https://forum.effectivealtruism.org/posts/cDdcNzyizzdZD4hbR/critique-of-openphil-s-macroeconomic-policy-advocacy"
},
{
"title": "Quantifying Uncertainty in GiveWell's GiveDirectly Cost-Effectiveness Analysis",
"author": "Hazelfire",
"link": "https://forum.effectivealtruism.org/posts/ycLhq4Bmep8ssr4wR/quantifying-uncertainty-in-givewell-s-givedirectly-cost"
},
{
"title": "Did OpenPhil ever publish their in-depth review of their three-year OpenAI grant?",
"author": "Markus Amalthea Magnuson",
"link": "https://forum.effectivealtruism.org/posts/sZhhW2AECqT5JikdE/did-openphil-ever-publish-their-in-depth-review-of-their"
},
{
"title": "Go Republican, Young EA!",
"author": "ColdButtonIssues",
"link": "https://forum.effectivealtruism.org/posts/myympkZ6SuT59vuEQ/go-republican-young-ea"
},
{
"title": "Are too many young, highly-engaged longtermist EAs doing movement-building?",
"author": "Anonymous_EA",
"link": "https://forum.effectivealtruism.org/posts/Lfy89vKqHatQdJgDZ/are-too-many-young-highly-engaged-longtermist-eas-doing"
},
{
"title": "EA on nuclear war and expertise",
"author": "bean",
"link": "https://forum.effectivealtruism.org/posts/bCB88GKeXTaxozr6y/ea-on-nuclear-war-and-expertise"
},
{
"title": "Criticism of EA Criticism Contest",
"author": "Zvi ",
"link": "https://forum.effectivealtruism.org/posts/qjMPATBLM5p4ABcEB/criticism-of-ea-criticism-contest"
},
{
"title": "EA's Culture and Thinking are Severely Limiting its Impact",
"author": "Peter Elam",
"link": "https://forum.effectivealtruism.org/posts/jhCGX8Gwq44TmyPJv/ea-s-culture-and-thinking-are-severely-limiting-its-impact"
},
{
"title": "Some core assumptions of effective altruism, according to me",
"author": "peterhartree",
"link": "https://forum.effectivealtruism.org/posts/av7MiEhi983SjoXTe/some-core-assumptions-of-effective-altruism-according-to-me"
},
{
"title": "Transcript of Twitter Discussion on EA from June 2022",
"author": "Zvi ",
"link": "https://forum.effectivealtruism.org/posts/MpJcvzHfQyFLxLZNh/transcript-of-twitter-discussion-on-ea-from-june-2022"
},
{
"title": "The EA community might be neglecting the value of influencing people",
"author": "JulianHazell",
"link": "https://forum.effectivealtruism.org/posts/3szWd8HwWccJb9z5L/the-ea-community-might-be-neglecting-the-value-of"
},
{
"title": "EA culture is special; we should proceed with intentionality",
"author": "James Lin",
"link": "https://forum.effectivealtruism.org/posts/KuKzqhxLzaREL7KKi/ea-culture-is-special-we-should-proceed-with-intentionality"
},
{
"title": "Four Concerns Regarding Longtermism",
"author": "Pat Andriola",
"link": "https://forum.effectivealtruism.org/posts/ESzGcWfkMtJgF2CCA/four-concerns-regarding-longtermism"
},
{
"title": "Things usually end slowly",
"author": "OllieBase",
"link": "https://forum.effectivealtruism.org/posts/qLwtCuh6nDCsrsrMK/things-usually-end-slowly"
},
{
"title": "Introduction to Pragmatic AI Safety [Pragmatic AI Safety #1]",
"author": "ThomasW",
"link": "https://forum.effectivealtruism.org/posts/MskKEsj8nWREoMjQK/introduction-to-pragmatic-ai-safety-pragmatic-ai-safety-1"
},
{
"title": "EA needs to understand its “failures” better",
"author": "mariushobbhahn",
"link": "https://forum.effectivealtruism.org/posts/Nwut6L6eAGmrFSaT4/ea-needs-to-understand-its-failures-better"
},
{
"title": "What is the overhead of grantmaking?",
"author": "MathiasKB",
"link": "https://forum.effectivealtruism.org/posts/RXm2mxvq3ReXmsHm4/what-is-the-overhead-of-grantmaking"
},
{
"title": "A Critique of The Precipice: Chapter 6 - The Risk Landscape [Red Team Challenge]",
"author": "Sarah Weiler",
"link": "https://forum.effectivealtruism.org/posts/faW24r7ocbcPisgCH/a-critique-of-the-precipice-chapter-6-the-risk-landscape-red"
},
{
"title": "Wheeling and dealing: An internal bargaining approach to moral uncertainty",
"author": "MichaelPlant",
"link": "https://forum.effectivealtruism.org/posts/kxEAkcEvyiwmjirjN/wheeling-and-dealing-an-internal-bargaining-approach-to"
},
{
"title": "The first AGI will be a buggy mess",
"author": "titotal",
"link": "https://forum.effectivealtruism.org/posts/pXjpZep49M6GGxFQF/the-first-agi-will-be-a-buggy-mess"
},
{
"title": "[Cause Exploration Prizes] The importance of Intercausal Impacts",
"author": "Sebastian Joy 樂百善",
"link": "https://forum.effectivealtruism.org/posts/MayveXrHbvXMBRo78/cause-exploration-prizes-the-importance-of-intercausal"
},
{
"title": "The Windfall Clause has a remedies problem",
"author": "John Bridge",
"link": "https://forum.effectivealtruism.org/posts/wBzfLyfJFfocmdrwL/the-windfall-clause-has-a-remedies-problem"
},
{
"title": "The Role of Individual Consumption Decisions in Animal Welfare and Climate are Analogous",
"author": "Gabriel Weil",
"link": "https://forum.effectivealtruism.org/posts/HWpwfTF5M84jo4iyo/the-role-of-individual-consumption-decisions-in-animal"
},
{
"title": "The Effective Altruism culture",
"author": "PabloAMC",
"link": "https://forum.effectivealtruism.org/posts/NkF9rAjZpkDajqDDt/the-effective-altruism-culture"
},
{
"title": "Concerns/Thoughts over international aid, longtermism and philosophical notes on speaking with Larry Temkin.",
"author": "Ben Yeoh",
"link": "https://forum.effectivealtruism.org/posts/uhaKXdkAcuXJZHSci/concerns-thoughts-over-international-aid-longtermism-and"
},
{
"title": "Future Paths for Effective Altruism",
"author": "James Broughel",
"link": "https://forum.effectivealtruism.org/posts/yzAoHcTzf3AjeGYsP/future-paths-for-effective-altruism"
},
{
"title": "We need more discussion and clarity on how university groups create value",
"author": "Oscar Galvin",
"link": "https://forum.effectivealtruism.org/posts/HNHHNCDLEsDNjNwvm/we-need-more-discussion-and-clarity-on-how-university-groups"
},
{
"title": "The dangers of high salaries within EA organisations",
"author": "James Ozden",
"link": "https://forum.effectivealtruism.org/posts/WXD3bRDBkcBhJ5Wcr/the-dangers-of-high-salaries-within-ea-organisations"
},
{
"title": "Crowdsourced Criticisms: What does EA think about EA?",
"author": "Hamish Huggard",
"link": "https://forum.effectivealtruism.org/posts/jK2Qends7GnyaRhm2/crowdsourced-criticisms-what-does-ea-think-about-ea"
},
{
"title": "Low-key Longtermism",
"author": "Jonathan Rystrom",
"link": "https://forum.effectivealtruism.org/posts/BaynHfmkjrfL8DXcK/low-key-longtermism"
},
{
"title": "The Credibility of Apocalyptic Claims: A Critique of Techno-Futurism within Existential Risk",
"author": "Ember",
"link": "https://forum.effectivealtruism.org/posts/a2XaDeadFe6eHfDwG/the-credibility-of-apocalyptic-claims-a-critique-of-techno"
},
{
"title": "Aesthetics as Epistemic Humility",
"author": "Étienne Fortier-Dubois",
"link": "https://forum.effectivealtruism.org/posts/bo6Jsvmq9oiykbDrM/aesthetics-as-epistemic-humility"
},
{
"title": "The Nietzschean Challenge to Effective Altruism",
"author": "Richard Y Chappell",
"link": "https://forum.effectivealtruism.org/posts/bedstSbqaP8aDBfDr/the-nietzschean-challenge-to-effective-altruism"
},
{
"title": "Should EA shift away (a bit) from elite universities?",
"author": "Joseph Lemien",
"link": "https://forum.effectivealtruism.org/posts/Rts8vKvbxkngPbFh7/should-ea-shift-away-a-bit-from-elite-universities"
},
{
"title": "Why I Hope (Certain) Hedonic Utilitarians Don't Control the Long-term Future",
"author": "Jared_Riggs",
"link": "https://forum.effectivealtruism.org/posts/PJKecg5ugYnyWhezC/why-i-hope-certain-hedonic-utilitarians-don-t-control-the"
},
{
"title": "Were really bad at guessing the future",
"author": "Benj Azose",
"link": "https://forum.effectivealtruism.org/posts/DkmNPpqTJKmudBHnp/we-re-really-bad-at-guessing-the-future"
},
{
"title": "Should large EA nonprofits consider splitting?",
"author": "Arepo",
"link": "https://forum.effectivealtruism.org/posts/J3pZ7fY6yvypvJrJE/should-large-ea-nonprofits-consider-splitting"
},
{
"title": "Effective Altruism, the Principle of Explosion and Epistemic Fragility",
"author": "Eigengender",
"link": "https://forum.effectivealtruism.org/posts/zG4pnJBCMi5t49Eya/effective-altruism-the-principle-of-explosion-and-epistemic"
},
{
"title": "Against Anthropic Shadow",
"author": "tobycrisford",
"link": "https://forum.effectivealtruism.org/posts/A47EWTS6oBKLqxBpw/against-anthropic-shadow"
},
{
"title": "A Quick List of Some Problems in AI Alignment As A Field",
"author": "NicholasKross",
"link": "https://forum.effectivealtruism.org/posts/JFmhYuso5s9PgrQET/a-quick-list-of-some-problems-in-ai-alignment-as-a-field"
},
{
"title": "Fixing bad incentives in EA",
"author": "IncentivesAccount",
"link": "https://forum.effectivealtruism.org/posts/3PrTiXhhNBdGtR9qf/fixing-bad-incentives-in-ea"
},
{
"title": "What 80000 Hours gets wrong about solar geoengineering",
"author": "Gideon Futerman",
"link": "https://forum.effectivealtruism.org/posts/6dbET4f9LbJZZTuDW/what-80000-hours-gets-wrong-about-solar-geoengineering"
},
{
"title": "Ideological tensions between Effective Altruism and The UK Civil Service",
"author": "KZ X",
"link": "https://forum.effectivealtruism.org/posts/J7cAFqq9g9LzSe5E3/ideological-tensions-between-effective-altruism-and-the-uk"
},
{
"title": "The danger of good stories",
"author": "DuncanS",
"link": "https://forum.effectivealtruism.org/posts/eZK95zxwpzNySRebC/the-danger-of-good-stories"
},
{
"title": "Methods for improving uncertainty analysis in EA cost-effectiveness models",
"author": "Froolow",
"link": "https://forum.effectivealtruism.org/posts/CuuCGzuzwD6cdu9mo/methods-for-improving-uncertainty-analysis-in-ea-cost"
},
{
"title": "Proposed tweak to the longtermism pitch",
"author": "TheOtherHannah",
"link": "https://forum.effectivealtruism.org/posts/nAvpSXELT2FZMD9aA/proposed-tweak-to-the-longtermism-pitch"
},
{
"title": "Capitalism, power and epistemology: a critique of EA",
"author": "Matthew_Doran",
"link": "https://forum.effectivealtruism.org/posts/xWFhD6uQuZehrDKeY/capitalism-power-and-epistemology-a-critique-of-ea"
},
{
"title": "Nuclear Fine-Tuning: How Many Worlds Have Been Destroyed?",
"author": "Ember",
"link": "https://forum.effectivealtruism.org/posts/Gg2YsjGe3oahw2kxE/nuclear-fine-tuning-how-many-worlds-have-been-destroyed"
},
{
"title": "An epistemic critique of longtermism",
"author": "Nathan_Barnard",
"link": "https://forum.effectivealtruism.org/posts/2455tgtiBsm5KXBfv/an-epistemic-critique-of-longtermism"
},
{
"title": "Should you still use the ITN framework? [Red Teaming Contest]",
"author": "frib",
"link": "https://forum.effectivealtruism.org/posts/hjH94Ji4CrpKadoCi/should-you-still-use-the-itn-framework-red-teaming-contest"
},
{
"title": "EA criticism contest: Why I am not an effective altruist",
"author": "ErikHoel",
"link": "https://forum.effectivealtruism.org/posts/PZ6pEaNkzAg62ze69/ea-criticism-contest-why-i-am-not-an-effective-altruist"
},
{
"title": "The Hidden Impossibilities Of Being An Effective Altruist.",
"author": "Refined Insights ",
"link": "https://forum.effectivealtruism.org/posts/fsxEDLM2oPzSREM4G/the-hidden-impossibilities-of-being-an-effective-altruist"
},
{
"title": "Effective means to combat autocracies",
"author": "Junius Brutus",
"link": "https://forum.effectivealtruism.org/posts/kawE7rFmp3SkzLxpx/effective-means-to-combat-autocracies"
},
{
"title": "Effective altruism is similar to the AI alignment problem and suffers from the same difficulties [Criticism and Red Teaming Contest entry]",
"author": "turchin",
"link": "https://forum.effectivealtruism.org/posts/g8fn7oyvki4psJeYR/effective-altruism-is-similar-to-the-ai-alignment-problem"
},
{
"title": "Should young EAs really focus on career capital?",
"author": "Michael B.",
"link": "https://forum.effectivealtruism.org/posts/RYBFyDWAYZL4YCkW2/should-young-eas-really-focus-on-career-capital"
},
{
"title": "Forecasting Through Fiction",
"author": "Yitz",
"link": "https://forum.effectivealtruism.org/posts/DhJhtxMX6SdYAsWiY/forecasting-through-fiction"
},
{
"title": "A critique of strong longtermism",
"author": "Pablo Rosado",
"link": "https://forum.effectivealtruism.org/posts/ryJys2fAz7J4vAwFC/a-critique-of-strong-longtermism"
},
{
"title": "The totalitarian implications of Effective Altruism",
"author": "Ed_Talks",
"link": "https://forum.effectivealtruism.org/posts/guyuidDdxNNxFegbJ/the-totalitarian-implications-of-effective-altruism-1"
},
{
"title": "EA Undervalues Unseen Data",
"author": "tcelferact",
"link": "https://forum.effectivealtruism.org/posts/MpYPCq9dW8wovYpRY/ea-undervalues-unseen-data"
},
{
"title": "What a Large and Welcoming EA Could Accomplish",
"author": "Peter Elam",
"link": "https://forum.effectivealtruism.org/posts/K24widt85ZbGqzZKN/what-a-large-and-welcoming-ea-could-accomplish"
},
{
"title": "The Malthusian Gradient: Why some third-world interventions may be doing more harm than good",
"author": "JoePater",
"link": "https://forum.effectivealtruism.org/posts/juFzy7CWhu6ApQMAA/the-malthusian-gradient-why-some-third-world-interventions"
},
{
"title": "Keeping it Real",
"author": "calumdavey",
"link": "https://forum.effectivealtruism.org/posts/ewEiyspZeqjZC7Yh7/keeping-it-real"
},
{
"title": "Why the EA aversion to local altruistic action?",
"author": "Locke",
"link": "https://forum.effectivealtruism.org/posts/LnuuN7zuBSZvEo845/why-the-ea-aversion-to-local-altruistic-action"
},
{
"title": "Critique: Cost-Benefit of Weirdness",
"author": "Mike Elias",
"link": "https://forum.effectivealtruism.org/posts/kw8ZmziAwcqPW2jt6/critique-cost-benefit-of-weirdness"
},
{
"title": "Effective Altruists and Religion: A Proposal for Experimentation",
"author": "Kbrown",
"link": "https://forum.effectivealtruism.org/posts/YA6fCNwB2c5cydrtG/effective-altruists-and-religion-a-proposal-for"
},
{
"title": "The Wages of North-Atlantic Bias",
"author": "Sach Wry",
"link": "https://forum.effectivealtruism.org/posts/FA4tC72qAB5k37uFC/the-wages-of-north-atlantic-bias"
},
{
"title": "Altruism is systems change, so why isnt EA? Constructive criticism.",
"author": "LB",
"link": "https://forum.effectivealtruism.org/posts/xZrvbwhSLmsGmHHSD/altruism-is-systems-change-so-why-isn-t-ea-constructive"
},
{
"title": "The reasonableness of special concerns",
"author": "jwt",
"link": "https://forum.effectivealtruism.org/posts/CFGYLDgvsYQhsyZ42/the-reasonableness-of-special-concerns"
},
{
"title": "The ordinal utility argument against effective altruism ",
"author": "Barracuda",
"link": "https://forum.effectivealtruism.org/posts/rNYCcRLzkQtQEBnLa/the-ordinal-utility-argument-against-effective-altruism"
},
{
"title": "“One should love ones neighbor more than oneself.”",
"author": "Barracuda",
"link": "https://forum.effectivealtruism.org/posts/bxbu8v83gw3MDzCBX/one-should-love-one-s-neighbor-more-than-oneself"
},
{
"title": "Love and AI: Relational Brain/Mind Dynamics in AI Development",
"author": "JeffreyK",
"link": "https://forum.effectivealtruism.org/posts/MdfLn33GpNWGN7CSE/love-and-ai-relational-brain-mind-dynamics-in-ai-development"
},
{
"title": "When 2/3rds of the world goes against you",
"author": "JeffreyK",
"link": "https://forum.effectivealtruism.org/posts/6va2EfHkQ3bTmdDyn/when-2-3rds-of-the-world-goes-against-you"
},
{
"title": "My views on EA --> attempt to a constructive criticism",
"author": "Jin Jo",
"link": "https://forum.effectivealtruism.org/posts/LcDcqX6KWGHm3tSgr/my-views-on-ea-greater-than-attempt-to-a-constructive"
},
{
"title": "Empirical critique of EA from another direction",
"author": "tonz",
"link": "https://forum.effectivealtruism.org/posts/nsqhmwmwZmWvFA2wb/empirical-critique-of-ea-from-another-direction"
},
{
"title": "Should we call ourselves 'Effective Altruists'?",
"author": "Sam_Coggins",
"link": "https://forum.effectivealtruism.org/posts/YyDRSARnXz8r5dgca/should-we-call-ourselves-effective-altruists"
},
{
"title": "Align Humans to Rationality?",
"author": "Scytale",
"link": "https://forum.effectivealtruism.org/posts/KhdrqMe5ZrJmubN46/align-humans-to-rationality"
},
{
"title": "Shared Consequences",
"author": "Noah Scales",
"link": "https://forum.effectivealtruism.org/posts/7BHt7wJxHmG68Ybmv/shared-consequences"
},
{
"title": "Effective Altruism Criticisms",
"author": "Gavin Palmer (heroLFG.com)",
"link": "https://forum.effectivealtruism.org/posts/mMaAcvNLQPC3aTqB6/effective-altruism-criticisms"
},
{
"title": "Portfolios, Locality, and Career - Three Critiques of Effective Altruism",
"author": "Philip Apps",
"link": "https://forum.effectivealtruism.org/posts/AoL2h2ZqTSNevdtRM/portfolios-locality-and-career-three-critiques-of-effective"
},
{
"title": "A Brief Description Of Altruistic Value",
"author": "Noah Scales",
"link": "https://forum.effectivealtruism.org/posts/sWXp77Hz7e2edrE84/a-brief-description-of-altruistic-value"
},
{
"title": "Accepting the Inevitability of Ambitious Egoism (”AE”)",
"author": "Dem0sthenes",
"link": "https://forum.effectivealtruism.org/posts/bQsxsaEcvxzEML9ZW/accepting-the-inevitability-of-ambitious-egoism-ae"
},
{
"title": "A Few More Thoughts about Altruistic Value Calculations",
"author": "Noah Scales",
"link": "https://forum.effectivealtruism.org/posts/HjjJminRW73dJfrzC/a-few-more-thoughts-about-altruistic-value-calculations"
},
{
"title": "A Choice Among Actions, Not a Choice Among Choices",
"author": "Noah Scales",
"link": "https://forum.effectivealtruism.org/posts/gSidRgcERb6osXL3a/a-choice-among-actions-not-a-choice-among-choices"
},
{
"title": "Against Longtermism: \nI welcome our robot overlords, and you should too!",
"author": "MattBall",
"link": "https://forum.effectivealtruism.org/posts/Cuu4Jjmp7QqL4a5Ls/against-longtermism-i-welcome-our-robot-overlords-and-you"
},
{
"title": "Run For President",
"author": "Brian Moore",
"link": "https://forum.effectivealtruism.org/posts/ZniCnE8XhCMLeGHj8/run-for-president"
},
{
"title": "Consequences Not Outcomes",
"author": "Noah Scales",
"link": "https://forum.effectivealtruism.org/posts/WyGfrjmRd3kwnXqqR/consequences-not-outcomes"
},
{
"title": "Ideas to improve the Effective Altruism Movement",
"author": "Noah Scales",
"link": "https://forum.effectivealtruism.org/posts/vrqhaNHNNZEuYWfgm/ideas-to-improve-the-effective-altruism-movement"
},
{
"title": "Effective Altruism Risks Perpetuating a (Severely) Harmful Worldview",
"author": "Theo Cox",
"link": "https://forum.effectivealtruism.org/posts/QRaf9iWvGbfKgWBvY/effective-altruism-risks-perpetuating-a-severely-harmful"
},
{
"title": "AUTHORITY",
"author": "Barracuda",
"link": "https://forum.effectivealtruism.org/posts/795D2YvpCfL9Eofmz/authority"
},
{
"title": "Book Review: What We Owe The Future (Erik Hoel)",
"author": "ErikHoel",
"link": "https://forum.effectivealtruism.org/posts/AyPTZLTwm5hN2Kfcb/book-review-what-we-owe-the-future-erik-hoel"
}
]

View File

@ -0,0 +1,69 @@
// Run with `npx ts-node src/scripts/contest/resolve-markets.ts`
import { data } from './criticism-and-red-teaming'
const DOMAIN = 'dev.manifold.markets'
// Dev API key for Cause Exploration Prizes (@CEP)
// const API_KEY = '188f014c-0ba2-4c35-9e6d-88252e281dbf'
// DEV API key for Criticism and Red Teaming (@CARTBot)
const API_KEY = '6ff1f78a-32fe-43b2-b31b-9e3c78c5f18c'
// Warning: Checking these in can be dangerous!
// Prod API key for @CEPBot
// Can just curl /v0/group/{slug} to get a group
async function getGroupBySlug(slug: string) {
const resp = await fetch(`https://${DOMAIN}/api/v0/group/${slug}`)
return await resp.json()
}
async function getMarketsByGroupId(id: string) {
// API structure: /v0/group/by-id/[id]/markets
const resp = await fetch(`https://${DOMAIN}/api/v0/group/by-id/${id}/markets`)
return await resp.json()
}
/* Example curl request:
# Resolve a binary market
$ curl https://manifold.markets/api/v0/market/{marketId}/resolve -X POST \
-H 'Content-Type: application/json' \
-H 'Authorization: Key {...}' \
--data-raw '{"outcome": "YES"}'
*/
async function resolveMarketById(
id: string,
outcome: 'YES' | 'NO' | 'MKT' | 'CANCEL'
) {
const resp = await fetch(`https://${DOMAIN}/api/v0/market/${id}/resolve`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Authorization: `Key ${API_KEY}`,
},
body: JSON.stringify({
outcome,
}),
})
return await resp.json()
}
async function main() {
const group = await getGroupBySlug('predict-cep')
const markets = await getMarketsByGroupId(group.id)
// Count up some metrics
console.log('Number of markets', markets.length)
console.log(
'Number of resolved markets',
markets.filter((m: any) => m.isResolved).length
)
// Resolve each market to NO
for (const market of markets) {
if (!market.isResolved) {
console.log(`Resolving market ${market.url} to NO`)
const resp = await resolveMarketById(market.id, 'NO')
}
}
}
main()

View File

@ -0,0 +1,55 @@
// Run with `npx ts-node src/scripts/contest/scrape-ea.ts`
import * as fs from 'fs'
import * as puppeteer from 'puppeteer'
export function scrapeEA(contestLink: string, fileName: string) {
;(async () => {
const browser = await puppeteer.launch({ headless: true })
const page = await browser.newPage()
await page.goto(contestLink)
let loadMoreButton = await page.$('.LoadMore-root')
while (loadMoreButton) {
await loadMoreButton.click()
await page.waitForNetworkIdle()
loadMoreButton = await page.$('.LoadMore-root')
}
/* Run javascript inside the page */
const data = await page.evaluate(() => {
const list = []
const items = document.querySelectorAll('.PostsItem2-root')
for (const item of items) {
const link =
'https://forum.effectivealtruism.org' +
item?.querySelector('a')?.getAttribute('href')
// Replace '&' with '&'
const clean = (str: string | undefined) => str?.replace(/&/g, '&')
list.push({
title: clean(item?.querySelector('a>span>span')?.innerHTML),
author: item?.querySelector('a.UsersNameDisplay-userName')?.innerHTML,
link: link,
})
}
return list
})
fs.writeFileSync(
`./src/scripts/contest/${fileName}.ts`,
`export const data = ${JSON.stringify(data, null, 2)}`
)
console.log(data)
await browser.close()
})()
}
scrapeEA(
'https://forum.effectivealtruism.org/topics/criticism-and-red-teaming-contest',
'criticism-and-red-teaming'
)

View File

@ -0,0 +1,725 @@
export const CEP_SUBMISSIONS = [
{
title:
"Open Philanthropy's Cause Exploration Prizes: $120k for written work on global health and wellbeing",
author: 'ChrisSmith',
link: 'https://forum.effectivealtruism.org/posts/iqcph4DbcP4PZGyDB/open-philanthropy-s-cause-exploration-prizes-usd120k-for',
},
{
title: 'New cause area: Violence against women and girls',
author: 'Akhil',
link: 'https://forum.effectivealtruism.org/posts/majcwf7i8pW8eMJ3v/new-cause-area-violence-against-women-and-girls',
},
{
title: 'Road Safety: The Silent Epidemic Impacting Youth',
author: 'AIPFoundation',
link: 'https://forum.effectivealtruism.org/posts/8jkYgxH9pYcHrgZqT/road-safety-the-silent-epidemic-impacting-youth',
},
{
title:
'To WELLBY or not to WELLBY? Measuring non-health, non-pecuniary benefits using subjective wellbeing',
author: 'JoelMcGuire',
link: 'https://forum.effectivealtruism.org/posts/dk48Sn6hpbMWeJo4G/to-wellby-or-not-to-wellby-measuring-non-health-non',
},
{
title: 'Family Planning: A Significant Opportunity for Impact',
author: 'Sarah H',
link: 'https://forum.effectivealtruism.org/posts/zgBmSgyWECJcbhmpc/family-planning-a-significant-opportunity-for-impact',
},
{
title: 'Cause area: Short-sleeper genes',
author: 'JohnBoyle',
link: 'https://forum.effectivealtruism.org/posts/nSwaDrHunt3ohh9Et/cause-area-short-sleeper-genes',
},
{
title: 'Cause Area: Differential Neurotechnology Development',
author: 'mwcvitkovic',
link: 'https://forum.effectivealtruism.org/posts/Qhn5nyRf93dsXodsw/cause-area-differential-neurotechnology-development',
},
{
title:
'Cause exploration prize: organophosphate pesticides and other neurotoxicants',
author: 'Ben Stewart',
link: 'https://forum.effectivealtruism.org/posts/LSDZ22GFryC3dhWvd/cause-exploration-prize-organophosphate-pesticides-and-other',
},
{
title:
'War Between the US and China: A case study for epistemic challenges around China-related catastrophic risk',
author: 'Jordan_Schneider',
link: 'https://forum.effectivealtruism.org/posts/E2BghQq9pwPgtHgiH/war-between-the-us-and-china-a-case-study-for-epistemic',
},
{
title: 'The (California) case for State Capacity as an EA cause area',
author: 'Locke',
link: 'https://forum.effectivealtruism.org/posts/wBre7Rm6tBzKbZ86B/the-california-case-for-state-capacity-as-an-ea-cause-area',
},
{
title:
'Directly Purchasing and Distributing Stunning Equipment to Fishing Boats Which Catch Enormous Amounts of Small Wild Fish',
author: 'Enginar',
link: 'https://forum.effectivealtruism.org/posts/tykEYESbJkqT39v64/directly-purchasing-and-distributing-stunning-equipment-to',
},
{
title:
'Doing good is a privilege. This needs to change if we want to do good long-term. ',
author: 'SofiaBalderson',
link: 'https://forum.effectivealtruism.org/posts/gicYG5ymk4pPzrKAd/doing-good-is-a-privilege-this-needs-to-change-if-we-want-to',
},
{
title:
'Cause Exploration Prizes: Could New Technology Help Solve the Glasses Problem?',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/a3vbQCgxTeYNvQBfc/cause-exploration-prizes-could-new-technology-help-solve-the',
},
{
title: 'New cause area: training health workers to prevent newborn deaths',
author: 'Marshall',
link: 'https://forum.effectivealtruism.org/posts/B7wohgDDdwPoQAatt/new-cause-area-training-health-workers-to-prevent-newborn',
},
{
title: 'Cause area proposal: International Macroeconomic Policy',
author: 'arushigupta',
link: 'https://forum.effectivealtruism.org/posts/gqzecJGYjqRF6c8o6/cause-area-proposal-international-macroeconomic-policy',
},
{
title: 'Fix Prison Telecom',
author: 'Benj Azose',
link: 'https://forum.effectivealtruism.org/posts/z9esvCk8oha69vkbA/fix-prison-telecom',
},
{
title: 'Potential new cause area: Obesity',
author: 'Akhil',
link: 'https://forum.effectivealtruism.org/posts/jhsXxPnKbwzLwrKFq/potential-new-cause-area-obesity',
},
{
title:
'Large-scale International Educational Migration: A Shallow Investigation',
author: 'Johannes Haushofer',
link: 'https://forum.effectivealtruism.org/posts/TMjRuTLjQa6z6rdeY/large-scale-international-educational-migration-a-shallow',
},
{
title: 'The Case for Making Professional Degrees Undergraduate Degrees',
author: 'ColdButtonIssues',
link: 'https://forum.effectivealtruism.org/posts/fEMpAcNycbXpp6Ext/the-case-for-making-professional-degrees-undergraduate',
},
{
title: 'Shareholder activism',
author: 'sbehmer',
link: 'https://forum.effectivealtruism.org/posts/fqf4vgCWebTszvHm9/shareholder-activism',
},
{
title: 'Global Health & Development - Beyond the Streetlight',
author: 'Richard Sedlmayr',
link: 'https://forum.effectivealtruism.org/posts/DXKWHAkihdb6nkKyG/global-health-and-development-beyond-the-streetlight-1',
},
{
title: '[Cause Exploration Prizes] Voting Methods',
author: 'Marcus_Ogren',
link: 'https://forum.effectivealtruism.org/posts/QCHLkgudfgbovgoan/cause-exploration-prizes-voting-methods',
},
{
title: 'Resilience & Biodiversity',
author: 'emwalz',
link: 'https://forum.effectivealtruism.org/posts/5iuyqnm2uKcutbaku/resilience-and-biodiversity',
},
{
title: 'Maritime capability and post-catastrophe resilience.',
author: 'Tom Gardiner',
link: 'https://forum.effectivealtruism.org/posts/nKDBhWFj3vwwFKwGC/maritime-capability-and-post-catastrophe-resilience-1',
},
{
title:
'Water, sanitation and hygiene (“WASH”) interventions as a cause area',
author: 'helmetedhornbill',
link: 'https://forum.effectivealtruism.org/posts/WAbjLFkpSoA7FDvTD/water-sanitation-and-hygiene-wash-interventions-as-a-cause',
},
{
title: 'Open Philanthropy should fund the abundance agenda movement',
author: 'ruthgrace',
link: 'https://forum.effectivealtruism.org/posts/BskvBk5zRfbHGNFKz/open-philanthropy-should-fund-the-abundance-agenda-movement',
},
{
title:
'Internal Migration: A Cost-Effective Method for Raising Wages, Improving Living Standards, and Promoting Economic Growth',
author: 'JamieSimonson',
link: 'https://forum.effectivealtruism.org/posts/dEfBDJXNnMzq7s955/internal-migration-a-cost-effective-method-for-raising-wages',
},
{
title: 'Cause area: climate adaptation in low-income countries',
author: 'Karthik Tadepalli',
link: 'https://forum.effectivealtruism.org/posts/nE827LwrRk5ep3Xao/cause-area-climate-adaptation-in-low-income-countries',
},
{
title: 'New Cause Area: Demographic Collapse',
author: 'Malcolm Collins',
link: 'https://forum.effectivealtruism.org/posts/vFfoqL74kmZbydKjp/new-cause-area-demographic-collapse',
},
{
title: '[Cause Exploration Prizes] Economic Growth and State Capacity ',
author: 'Jeffrey Mason',
link: 'https://forum.effectivealtruism.org/posts/BkJepw5R2pFc55LEc/cause-exploration-prizes-economic-growth-and-state-capacity',
},
{
title:
'Energy Access in Sub-Saharan Africa: Open Philanthropy Cause Exploration Prize Submission',
author: 'Tomer_Goloboy',
link: 'https://forum.effectivealtruism.org/posts/ZPjMemurtzeumwcdw/energy-access-in-sub-saharan-africa-open-philanthropy-cause',
},
{
title: 'Peacebuilding and Violent Conflict',
author: 'Charlie Dougherty',
link: 'https://forum.effectivealtruism.org/posts/dPx7LiNp5MX9RWdfa/peacebuilding-and-violent-conflict',
},
{
title: '[Cause Exploration Prizes] Training experts to be forecasters',
author: 'Sam Abbott',
link: 'https://forum.effectivealtruism.org/posts/WFbf2d4LHjgvWJCus/cause-exploration-prizes-training-experts-to-be-forecasters',
},
{
title: 'Why Genetic Rescue',
author: 'David Lang',
link: 'https://forum.effectivealtruism.org/posts/ebBPcDxtSckRAoJfo/why-genetic-rescue',
},
{
title:
'Targeted Treatment of Anemia in Adolescents in India as a Cause Area',
author: 'Akash Kulgod',
link: 'https://forum.effectivealtruism.org/posts/SgqBAeoCbQeLxmMoj/targeted-treatment-of-anemia-in-adolescents-in-india-as-a',
},
{
title: '[Cause Exploration Prizes] Fix the Money, Fix the world',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/Kg7KixqEHWBctJ4az/cause-exploration-prizes-fix-the-money-fix-the-world',
},
{
title: '[Cause Exploration Prizes] More Animal Advocacy R&D',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/sCQBJhcNZ4Ye36Cni/cause-exploration-prizes-more-animal-advocacy-r-and-d',
},
{
title: '[Cause Exploration Prizes] The importance of Intercausal Impacts',
author: 'Sebastian Joy 樂百善',
link: 'https://forum.effectivealtruism.org/posts/MayveXrHbvXMBRo78/cause-exploration-prizes-the-importance-of-intercausal',
},
{
title: 'Cause Exploration: Child and Adolescent Mental Health in LMICs',
author: 'Shen Javier',
link: 'https://forum.effectivealtruism.org/posts/vvwS2YdhCFqNSsoBv/cause-exploration-child-and-adolescent-mental-health-in',
},
{
title: 'Mind Enhancement Cause Exploration',
author: 'timfarkas',
link: 'https://forum.effectivealtruism.org/posts/hGY3eErGzEef7Ck64/mind-enhancement-cause-exploration',
},
{
title: 'New Cause: Radio Ads Against Cousin Marriage in LMIC',
author: 'Jackson Wagner',
link: 'https://forum.effectivealtruism.org/posts/h8iqvzGQJ9HiRTRja/new-cause-radio-ads-against-cousin-marriage-in-lmic',
},
{
title: 'Cause Exploration Prizes submission: bivalve aquaculture',
author: 'Brian Lui',
link: 'https://forum.effectivealtruism.org/posts/7keuWWMoYY6dMnqys/cause-exploration-prizes-submission-bivalve-aquaculture',
},
{
title: '[Cause Exploration Prizes] Jhana meditation',
author: 'Milan_Griffes',
link: 'https://forum.effectivealtruism.org/posts/XhD9ooZeJcQD8QJZL/cause-exploration-prizes-jhana-meditation',
},
{
title:
'Cause Exploration Prizes: Expanding access to infertility services in Low- and Middle-Income Countries (LMICs)',
author: 'Soleine Scotney',
link: 'https://forum.effectivealtruism.org/posts/WAnJw5bhuQwhJiLTm/cause-exploration-prizes-expanding-access-to-infertility',
},
{
title: 'Social Relationships: A Neglected Factor in Wellbeing',
author: 'Minh Nguyen',
link: 'https://forum.effectivealtruism.org/posts/kF9aBCGrq3FwENaXM/social-relationships-a-neglected-factor-in-wellbeing',
},
{
title:
'Cause Exploration Prizes: Reducing Suffering and Long Term Risk in Common Law Nations via Strategic Case Law Funding',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/C6urjnDeKjHGwf2M3/cause-exploration-prizes-reducing-suffering-and-long-term',
},
{
title: 'One Million Missing Children',
author: 'ColdButtonIssues',
link: 'https://forum.effectivealtruism.org/posts/H5LDwwmdBYBDNXTq4/one-million-missing-children',
},
{
title: '[Cause Exploration Prizes] Social and Behavioral Science R&D',
author: 'Anna Harvey',
link: 'https://forum.effectivealtruism.org/posts/var4x7y3TfeAYgLH5/cause-exploration-prizes-social-and-behavioral-science-r-and',
},
{
title:
'Long Covid: mass disability and broad societal consequences [Cause Exploration Prizes] ',
author: 'SiebeRozendal',
link: 'https://forum.effectivealtruism.org/posts/njgRDx5cKtSM8JubL/long-covid-mass-disability-and-broad-societal-consequences',
},
{
title:
'[Cause Exploration Prizes] Why we should work on preventing suicide',
author: 'Lydia Field',
link: 'https://forum.effectivealtruism.org/posts/wfgtdTdmvwxfXzyya/cause-exploration-prizes-why-we-should-work-on-preventing',
},
{
title: 'Sleep: Open Philanthropy Cause Exploration Prize',
author: 'SuhanKacholia',
link: 'https://forum.effectivealtruism.org/posts/qnDBN3nAXgwyTnrAC/sleep-open-philanthropy-cause-exploration-prize',
},
{
title: 'NEW GLOBAL POOLS: IMPACT FUNDS ',
author: 'TPogge',
link: 'https://forum.effectivealtruism.org/posts/J8fwT9cZd6x5eED3e/new-global-pools-impact-funds',
},
{
title: 'New cause area: Traffic congestion',
author: 'JeremyR',
link: 'https://forum.effectivealtruism.org/posts/63nXdEwa53HiCc8Ci/new-cause-area-traffic-congestion-1',
},
{
title:
'[Cause Exploration Prizes] Human Engram Preservation as a Neglected Cause Area',
author: 'aurellem',
link: 'https://forum.effectivealtruism.org/posts/j8GYqBJavn5vwDFj6/cause-exploration-prizes-human-engram-preservation-as-a',
},
{
title: '[Cause Exploration Prizes] Rich to Poor Country Spillovers',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/iZagToiirYgqiX3XR/cause-exploration-prizes-rich-to-poor-country-spillovers',
},
{
title: '[Cause Exploration Prizes] Reducing global childhood sexual abuse',
author: 'Thomas_Reilly',
link: 'https://forum.effectivealtruism.org/posts/7LGg2u8v2ebQe9nxn/cause-exploration-prizes-reducing-global-childhood-sexual',
},
{
title: "Saving lives near the precipice: we're doing it wrong?",
author: 'Samin',
link: 'https://forum.effectivealtruism.org/posts/hz2Q8GgZ28YKLazGb/saving-lives-near-the-precipice-we-re-doing-it-wrong',
},
{
title: 'Cause Exploration: Governance Design & Formation',
author: 'RoboTeddy',
link: 'https://forum.effectivealtruism.org/posts/ue9qrxXPLfGxNssvX/cause-exploration-governance-design-and-formation',
},
{
title:
'The Economic Benefits of Promoting and Protecting the Rights of LGBTQ+ Communities in Developing Countries',
author: 'Susannah Hares',
link: 'https://forum.effectivealtruism.org/posts/nW7itcuaqb2CrC2mC/the-economic-benefits-of-promoting-and-protecting-the-rights-1',
},
{
title: '[Cause Exploration Prizes] Obstetric Violence',
author: 'Tracy Brinkerhoff',
link: 'https://forum.effectivealtruism.org/posts/MWWFiZfBvryY8buTw/cause-exploration-prizes-obstetric-violence',
},
{
title: '[Cause Exploration Prizes] Trust and Science',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/G6gzgAvrvjkjfBsQj/cause-exploration-prizes-trust-and-science',
},
{
title:
'[Cause Exploration Prizes] Farmed Animal Welfare in Sub-Saharan Africa',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/a4sWmWNufYvAjimNg/cause-exploration-prizes-farmed-animal-welfare-in-sub',
},
{
title:
'[Cause Exploration Prizes] Longer, healthier lives: public engagement around ageing and health',
author: 'Patrick Wilson',
link: 'https://forum.effectivealtruism.org/posts/dKKa2nwposmKKg3pM/cause-exploration-prizes-longer-healthier-lives-public',
},
{
title:
'[Cause Exploration Prizes] Software Systems for Collective Intelligence',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/gttFbbRgTqZtwxDto/cause-exploration-prizes-software-systems-for-collective',
},
{
title: '[Cause Exploration Prizes] Fix Prison Telecoms',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/dZswSuy59icPkhC6b/cause-exploration-prizes-fix-prison-telecoms',
},
{
title: '[Cause Exploration Prizes] Sickle Cell Disease',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/rvACMsMmmDonNhskD/cause-exploration-prizes-sickle-cell-disease',
},
{
title: 'A platform for on-demand vaccination',
author: 'George3d6',
link: 'https://forum.effectivealtruism.org/posts/rS2zWRDxw5vZwdQAC/a-platform-for-on-demand-vaccination',
},
{
title: '[Cause Exploration Prizes] Voluntary Family Planning',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/Kneivf7uokqqNTFAM/cause-exploration-prizes-voluntary-family-planning',
},
{
title: '[Cause Exploration Prizes] Antimicrobial Resistance',
author: 'rhi',
link: 'https://forum.effectivealtruism.org/posts/Jcnjwv6pHrqT2igRu/cause-exploration-prizes-antimicrobial-resistance',
},
{
title:
'[Cause Exploration Prizes] Natural Disaster Preparedness and Research',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/ppSun8EaDPsAQyH3B/cause-exploration-prizes-natural-disaster-preparedness-and',
},
{
title: '[Cause Exploration Prizes] Early Childhood Education',
author: 'Anne Fitzpatrick',
link: 'https://forum.effectivealtruism.org/posts/WiCEyhm2gp74pphHB/cause-exploration-prizes-early-childhood-education',
},
{
title: '[Cause Exploration Prizes] Lessons from Covid',
author: 'Marcel Müller',
link: 'https://forum.effectivealtruism.org/posts/5FMsC9nXZdSDsigBT/cause-exploration-prizes-lessons-from-covid',
},
{
title: 'Cause: Reducing Judicial Delay in India',
author: 'Vastav Ratra',
link: 'https://forum.effectivealtruism.org/posts/JcYyLfbnbhANCJdbv/cause-reducing-judicial-delay-in-india',
},
{
title:
'[Cause Exploration Prizes] Measuring civic engagement - an important yet undervalued well-being metric?',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/GiW8rvdcNHYJnSnK3/cause-exploration-prizes-measuring-civic-engagement-an',
},
{
title: 'Movable Virtual Fencing Systems and Livestock Welfare',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/WexugYE3z8xHhYw4r/movable-virtual-fencing-systems-and-livestock-welfare',
},
{
title:
'[Cause Exploration Prizes] Voluntary Male Circumcision in the prevention of HIV in Nyanza and Western Regions of Kenya',
author: 'Edward Kusewa',
link: 'https://forum.effectivealtruism.org/posts/6nxbe5AxtpH2Fjaqj/cause-exploration-prizes-voluntary-male-circumcision-in-the',
},
{
title:
'[Cause Exploration Prizes] Advanced Market Commitments for public goods',
author: 'Ben Yeoh',
link: 'https://forum.effectivealtruism.org/posts/LFFWkoeAhXRF4HBwW/cause-exploration-prizes-advanced-market-commitments-for',
},
{
title: '[Cause Exploration Prizes] Antimicrobial Resistance',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/DELryFuR7pNjwRZZC/cause-exploration-prizes-antimicrobial-resistance-1',
},
{
title:
'[Cause Exploration Prizes] Transportation Issues in Developing Countries',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/6mY2uJmGzmfyYzQ2z/cause-exploration-prizes-transportation-issues-in-developing',
},
{
title: '[Cause Exploration Prizes] Tuberculosis',
author: 'jserv',
link: 'https://forum.effectivealtruism.org/posts/9HJKrGNgk2FCGapso/cause-exploration-prizes-tuberculosis',
},
{
title:
'[Cause Exploration Prizes] Targeting cardiovascular disease in the developing world',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/zSmnWHjBkdPNJSbiN/cause-exploration-prizes-targeting-cardiovascular-disease-in',
},
{
title:
'[Cause Exploration Prizes] Everyday Peace Indicators: An effective tool for measuring hard to measure social concepts',
author: 'Pamina Firchow',
link: 'https://forum.effectivealtruism.org/posts/XNkzixN6qhp2ePcvi/cause-exploration-prizes-everyday-peace-indicators-an',
},
{
title: '[Cause Exploration Prizes] From Energy Deprived Poor Africa',
author: 'Juspermachogu',
link: 'https://forum.effectivealtruism.org/posts/dA6tGKnGaynddwxwL/cause-exploration-prizes-from-energy-deprived-poor-africa',
},
{
title: '[Cause Exploration Prizes] Mental health diagnostic system',
author: 'EmmiPosio',
link: 'https://forum.effectivealtruism.org/posts/99jXtmycKiwpY653a/cause-exploration-prizes-mental-health-diagnostic-system',
},
{
title:
'[Cause Exploration Prizes] Open Access Technology for the Developing World',
author: 'Nathan Sidney',
link: 'https://forum.effectivealtruism.org/posts/ZxF9gYQ4kXubrk2jA/cause-exploration-prizes-open-access-technology-for-the',
},
{
title:
'[Cause Exploration Prizes] Emergence research as a high-impact cause area',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/iapfxkhbE8vRk5rKX/cause-exploration-prizes-emergence-research-as-a-high-impact',
},
{
title:
'Quality matters: Early childhood education and development in Nepal',
author: 'Alisha Karki',
link: 'https://forum.effectivealtruism.org/posts/nG8Ncf4AHCgreakzy/quality-matters-early-childhood-education-and-development-in',
},
{
title:
'[Cause Exploration Prizes] Creating a “regulatory turbocharger” for EA relevant policies',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/Ph22HqekBwKyQGawq/cause-exploration-prizes-creating-a-regulatory-turbocharger',
},
{
title: '[Cause Exploration Prizes] Effective Altruistic Economic Model',
author: 'Thomas (Tom) Schwendener',
link: 'https://forum.effectivealtruism.org/posts/7Sqe9mDJwwARC3Nua/cause-exploration-prizes-effective-altruistic-economic-model',
},
{
title:
'[Cause Exploration Prizes] Shortage of pediatricians in Africa and South-East Asia',
author: 'Rachel_chen',
link: 'https://forum.effectivealtruism.org/posts/RbqqA5T4QaXjqkbiq/cause-exploration-prizes-shortage-of-pediatricians-in-africa',
},
{
title: '[Cause Exploration Prizes] Measuring Happiness',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/GaGkgEmRh4XpatGCm/cause-exploration-prizes-measuring-happiness',
},
{
title:
'[Cause Exploration Prizes] Legal Efforts to Increase American Kidney Donations',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/q2EJQ7p6bJaSpE3hN/cause-exploration-prizes-legal-efforts-to-increase-american',
},
{
title:
'[Cause Exploration Prizes] Investment in Fetal, Neonatal and Infant Development ',
author: 'Sofia Panasiuk',
link: 'https://forum.effectivealtruism.org/posts/DdGdEWHu8kebS6mJu/cause-exploration-prizes-investment-in-fetal-neonatal-and',
},
{
title:
'[Cause Exploration Prizes] Can purpose in life be a simple, powerful, and systemic leverage point for positive change?',
author: 'Kokeb Solomon',
link: 'https://forum.effectivealtruism.org/posts/KqffgESkpTQBeqaWy/cause-exploration-prizes-can-purpose-in-life-be-a-simple',
},
{
title:
'[Cause Exploration Prizes] Increasing Cause Area Impact Leverage via Empowerment of Communities',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/tpHJj77dKDMWcdabp/cause-exploration-prizes-increasing-cause-area-impact',
},
{
title:
'[Cause Exploration Prizes] Dynamic democracy to guard against authoritarian lock-in',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/G5tF3TP7btJThcKoJ/cause-exploration-prizes-dynamic-democracy-to-guard-against',
},
{
title: '[Cause Exploration Prizes] Expanding Circles, Improving Lives',
author: 'Chad Patrick Osorio',
link: 'https://forum.effectivealtruism.org/posts/At5eJJxafx6kcQWty/cause-exploration-prizes-expanding-circles-improving-lives',
},
{
title: 'Open Climate Data as a possible cause area, Open Philanthropy',
author: 'Ben Yeoh',
link: 'https://forum.effectivealtruism.org/posts/s9HPpvMHgS5QYEM4C/open-climate-data-as-a-possible-cause-area-open-philanthropy',
},
{
title: 'In Support of Paradigm Shifting',
author: 'helmetedhornbill',
link: 'https://forum.effectivealtruism.org/posts/babM7nAHnrWSmL4pC/in-support-of-paradigm-shifting',
},
{
title: '[Cause Exploration Prizes] Homeless Relief',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/mNrZPoTmoseoFBXGd/cause-exploration-prizes-homeless-relief',
},
{
title: 'A Fair Vote Can Change the World',
author: 'Rob Richie',
link: 'https://forum.effectivealtruism.org/posts/6AFNCgTvkxysBpgi8/a-fair-vote-can-change-the-world',
},
{
title: 'Cause area: Developmental Cognitive Neuroepidemiology',
author: 'Hauke Hillebrandt',
link: 'https://forum.effectivealtruism.org/posts/m2tgGev5XpkTkvERL/cause-area-developmental-cognitive-neuroepidemiology-1',
},
{
title:
'Mitigating chicken and fish suffering by closing the “dairy gap” in Asia and Africa - Shorter Version',
author: 'Enginar',
link: 'https://forum.effectivealtruism.org/posts/dHJCvmPKY5HDaX2S6/mitigating-chicken-and-fish-suffering-by-closing-the-dairy',
},
{
title: 'New Cause area: The Meta-Cause [Cause Exploration Prize]',
author: 'simeon_c',
link: 'https://forum.effectivealtruism.org/posts/9t8c69fdrK9LycxxP/new-cause-area-the-meta-cause-cause-exploration-prize-10',
},
{
title: 'Cause: biopharma R&D productivity',
author: 'BoxFan',
link: 'https://forum.effectivealtruism.org/posts/xzcdN6aGCGbii86BX/cause-biopharma-r-and-d-productivity',
},
{
title: 'Cause Area Proposal: Paperwork Reduction',
author: 'Ja3k',
link: 'https://forum.effectivealtruism.org/posts/cp6R26srno75WH2AD/cause-area-proposal-paperwork-reduction',
},
{
title: 'New cause area: maternal morbidity',
author: 'alexhill',
link: 'https://forum.effectivealtruism.org/posts/pxrN28gfn26Z7dzch/new-cause-area-maternal-morbidity',
},
{
title: 'Cause Exploration: Adapting to Extreme Heat Exposure in South Asia',
author: 'Surbhi B',
link: 'https://forum.effectivealtruism.org/posts/g7Rn2fiq52QN8pbJa/cause-exploration-adapting-to-extreme-heat-exposure-in-south',
},
{
title:
'New cause area: Improving diagnosis and treatment of bipolar spectrum disorders',
author: 'Karolina Soltys',
link: 'https://forum.effectivealtruism.org/posts/ft7ChZnzyq2SwsgBa/new-cause-area-improving-diagnosis-and-treatment-of-bipolar',
},
{
title: '[Cause Exploration Prizes] Transnational Surrogacy',
author: 'Kelly Geddes',
link: 'https://forum.effectivealtruism.org/posts/uRk85GQh4x8gTgMEm/cause-exploration-prizes-transnational-surrogacy',
},
{
title:
"Deadline extension (to August 11) for Open Philanthropy's Cause Exploration Prizes",
author: 'ChrisSmith',
link: 'https://forum.effectivealtruism.org/posts/WdMbmLfb7DMMYHvKf/deadline-extension-to-august-11-for-open-philanthropy-s',
},
{
title:
'Cause exploration: improving wild fish slaughter [half-baked, post-deadline]',
author: 'Aaron Bergman',
link: 'https://forum.effectivealtruism.org/posts/JsuefG6PurSxacXds/cause-exploration-improving-wild-fish-slaughter-half-baked',
},
{
title: 'Should we do more to mitigate occupational noise exposure?',
author: 'Drew Housman',
link: 'https://forum.effectivealtruism.org/posts/HN6QuXntDkkpoQDad/should-we-do-more-to-mitigate-occupational-noise-exposure',
},
{
title: 'Cause Exploration Prize: Distribution of Information Among Humans',
author: 'markus_over',
link: 'https://forum.effectivealtruism.org/posts/ad2kEQmbERsAnJ4zc/cause-exploration-prize-distribution-of-information-among',
},
{
title:
'Cause Exploration Prizes: Publishing Comprehensive Books Which Make the Case for Effective Corporate Animal Welfare Campaigns via a Writing Contest for Potential Authors',
author: 'Enginar',
link: 'https://forum.effectivealtruism.org/posts/9sraY9qrwuiKXJjhG/cause-exploration-prizes-publishing-comprehensive-books',
},
{
title: 'Pollination in India',
author: 'Iska Knuuttila',
link: 'https://forum.effectivealtruism.org/posts/TsBRvGXr3rmJsruje/pollination-in-india',
},
{
title:
'Cause Exploration Prizes: Time-restricted eating (IF) for individual and community health in LMICs ',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/RuwCxvJ3xEwQfZevN/cause-exploration-prizes-time-restricted-eating-if-for',
},
{
title:
'Cause Exploration Prizes: Misinformation Gone Viral: Education As Pandemic Prevention',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/Whi5ADu79uJrTpqEt/cause-exploration-prizes-misinformation-gone-viral-education',
},
{
title:
'Cause: research to narrow the gap between in vitro and in vivo experiments',
author: 'calvinmccarter',
link: 'https://forum.effectivealtruism.org/posts/tiHoApRMZPrviBxEx/cause-research-to-narrow-the-gap-between-in-vitro-and-in',
},
{
title:
'[Cause Exploration Prizes] Unlocking Americas Potential, or, “Its The Senate, Stupid”',
author: 'Open Philanthropy',
link: 'https://forum.effectivealtruism.org/posts/3dZuN4q4cpCmr3xBb/cause-exploration-prizes-unlocking-america-s-potential-or-it',
},
{
title: 'Cause exploration: Tobacco harm reduction',
author: 'kristof',
link: 'https://forum.effectivealtruism.org/posts/bQh82m2zr3enC9vK9/cause-exploration-tobacco-harm-reduction',
},
{
title: 'Free-Ranging Dog Welfare in India as a Cause Area',
author: 'Akash Kulgod',
link: 'https://forum.effectivealtruism.org/posts/jXFA5ffcoYomSDv9A/free-ranging-dog-welfare-in-india-as-a-cause-area',
},
{
title: 'Investing for a cause',
author: 'brb243',
link: 'https://forum.effectivealtruism.org/posts/nafdbGWLj5epjvJEm/investing-for-a-cause',
},
{
title: 'New Cause Area: Steering and Stabilising Status Games',
author: 'Wim',
link: 'https://forum.effectivealtruism.org/posts/gpm668mLyhARPYzji/new-cause-area-steering-and-stabilising-status-games',
},
{
title: 'Cause X: Public Stretch Prizes',
author: 'philipkd',
link: 'https://forum.effectivealtruism.org/posts/DkMbqjNNc4hKYShtf/cause-x-public-stretch-prizes-1',
},
{
title: 'Cause Exploration: Managing Societal Transitions',
author: 'alexherwix',
link: 'https://forum.effectivealtruism.org/posts/hzrAXzoPDoEqueXW7/cause-exploration-managing-societal-transitions',
},
{
title:
'Cosmic rays could cause major electronic disruption and pose a small existential risk',
author: 'M_Allcock',
link: 'https://forum.effectivealtruism.org/posts/9gjc4ok4GfwuyRASL/cosmic-rays-could-cause-major-electronic-disruption-and-pose',
},
{
title:
'Cause Exploration Prize: Modernizing the Social Science Research Infrastructure',
author: 'yfu',
link: 'https://forum.effectivealtruism.org/posts/zTD8rhCFfa6qLCjGY/cause-exploration-prize-modernizing-the-social-science',
},
{
title: 'Open Philanthropy Should Fund Further Cause Exploration',
author: 'brb243',
link: 'https://forum.effectivealtruism.org/posts/tvMjgDWptF5MNJtAo/open-philanthropy-should-fund-further-cause-exploration',
},
{
title:
'Promoting climate considerations within existing high priority areas of work',
author: 'helmetedhornbill',
link: 'https://forum.effectivealtruism.org/posts/pmfyGEa4NozDm2fng/promoting-climate-considerations-within-existing-high',
},
{
title:
'Cause Exploration Prize: Unfettered Global Internet Access & Device Ownership ',
author: 'samhbarton',
link: 'https://forum.effectivealtruism.org/posts/DC9AZSn4dpFptA8mS/cause-exploration-prize-unfettered-global-internet-access',
},
{
title:
'Reciprocity & the causes of diminishing returns: cause exploration submission',
author: 'LB',
link: 'https://forum.effectivealtruism.org/posts/x9towRLtvYidkXugk/reciprocity-and-the-causes-of-diminishing-returns-cause',
},
{
title: 'Potential Risks of Advanced Gene Editing Technologies',
author: 'Courtney Colston',
link: 'https://forum.effectivealtruism.org/posts/EEgT2jHZSExBAPsTD/potential-risks-of-advanced-gene-editing-technologies',
},
{
title:
'The Economic Benefits of Promoting and Protecting the Rights of LGBTQ+ Communities in Developing Countries (cause exploration)',
author: 'Susannah Hares',
link: 'https://forum.effectivealtruism.org/posts/Xc7AH2Recks3RHteE/the-economic-benefits-of-promoting-and-protecting-the-rights',
},
]

View File

@ -7,7 +7,8 @@
"outDir": "lib",
"sourceMap": true,
"strict": true,
"target": "es2017"
"target": "es2017",
"resolveJsonModule": true
},
"references": [
{

View File

@ -0,0 +1,249 @@
import { Row } from 'web/components/layout/row'
import { Col } from 'web/components/layout/col'
import { User } from 'common/user'
import React, { useEffect, memo, useState, useMemo } from 'react'
import { Avatar } from 'web/components/avatar'
import { Group } from 'common/group'
import { Comment, createCommentOnGroup } from 'web/lib/firebase/comments'
import {
CommentInputTextArea,
TruncatedComment,
} from 'web/components/feed/feed-comments'
import { track } from 'web/lib/service/analytics'
import { firebaseLogin } from 'web/lib/firebase/users'
import { useRouter } from 'next/router'
import clsx from 'clsx'
import { UserLink } from 'web/components/user-page'
import { groupPath } from 'web/lib/firebase/groups'
import { CopyLinkDateTimeComponent } from 'web/components/feed/copy-link-date-time'
import { CommentTipMap, CommentTips } from 'web/hooks/use-tip-txns'
import { Tipper } from 'web/components/tipper'
import { sum } from 'lodash'
import { formatMoney } from 'common/util/format'
import { useWindowSize } from 'web/hooks/use-window-size'
export function ContestChat(props: {
messages: Comment[]
user: User | null | undefined
contest: Group
tips: CommentTipMap
}) {
const { messages, user, contest, tips } = props
const [messageText, setMessageText] = useState('')
const [isSubmitting, setIsSubmitting] = useState(false)
const [scrollToBottomRef, setScrollToBottomRef] =
useState<HTMLDivElement | null>(null)
const [scrollToMessageId, setScrollToMessageId] = useState('')
const [scrollToMessageRef, setScrollToMessageRef] =
useState<HTMLDivElement | null>(null)
const [replyToUsername, setReplyToUsername] = useState('')
const [inputRef, setInputRef] = useState<HTMLTextAreaElement | null>(null)
const [groupedMessages, setGroupedMessages] = useState<Comment[]>([])
const router = useRouter()
const isMember = user && contest.memberIds.includes(user?.id)
useMemo(() => {
// Group messages with createdTime within 2 minutes of each other.
const tempMessages = []
for (let i = 0; i < messages.length; i++) {
const message = messages[i]
if (i === 0) tempMessages.push({ ...message })
else {
const prevMessage = messages[i - 1]
const diff = message.createdTime - prevMessage.createdTime
const creatorsMatch = message.userId === prevMessage.userId
if (diff < 2 * 60 * 1000 && creatorsMatch) {
tempMessages[tempMessages.length - 1].text += `\n${message.text}`
} else {
tempMessages.push({ ...message })
}
}
}
setGroupedMessages(tempMessages)
}, [messages])
useEffect(() => {
scrollToMessageRef?.scrollIntoView()
}, [scrollToMessageRef])
useEffect(() => {
if (!isSubmitting)
scrollToBottomRef?.scrollTo({ top: scrollToBottomRef?.scrollHeight || 0 })
}, [scrollToBottomRef, isSubmitting])
useEffect(() => {
const elementInUrl = router.asPath.split('#')[1]
if (messages.map((m) => m.id).includes(elementInUrl)) {
setScrollToMessageId(elementInUrl)
}
}, [messages, router.asPath])
function onReplyClick(comment: Comment) {
setReplyToUsername(comment.userUsername)
}
async function submitMessage() {
if (!user) {
track('sign in to comment')
return await firebaseLogin()
}
if (!messageText || isSubmitting) return
setIsSubmitting(true)
await createCommentOnGroup(contest.id, messageText, user)
setMessageText('')
setIsSubmitting(false)
setReplyToUsername('')
inputRef?.focus()
}
function focusInput() {
inputRef?.focus()
}
const { width, height } = useWindowSize()
const [containerRef, setContainerRef] = useState<HTMLDivElement | null>(null)
// Subtract bottom bar when it's showing (less than lg screen)
const bottomBarHeight = (width ?? 0) < 1024 ? 58 : 0
const remainingHeight =
(height ?? window.innerHeight) -
(containerRef?.offsetTop ?? 0) -
bottomBarHeight
return (
<Col ref={setContainerRef} style={{ height: remainingHeight }}>
<Col
className={
'w-full flex-1 space-y-2 overflow-x-hidden overflow-y-scroll pt-2'
}
ref={setScrollToBottomRef}
>
{groupedMessages.map((message) => (
<GroupMessage
user={user}
key={message.id}
comment={message}
group={contest}
onReplyClick={onReplyClick}
highlight={message.id === scrollToMessageId}
setRef={
scrollToMessageId === message.id
? setScrollToMessageRef
: undefined
}
tips={tips[message.id] ?? {}}
/>
))}
{messages.length === 0 && (
<div className="p-2 text-gray-500">
No messages yet. Why not{isMember ? ` ` : ' join and '}
<button
className={'cursor-pointer font-bold text-gray-700'}
onClick={() => focusInput()}
>
add one?
</button>
</div>
)}
</Col>
{user && contest.memberIds.includes(user.id) && (
<div className="flex w-full justify-start gap-2 p-2">
<div className="mt-1">
<Avatar
username={user?.username}
avatarUrl={user?.avatarUrl}
size={'sm'}
/>
</div>
<div className={'flex-1'}>
<CommentInputTextArea
commentText={messageText}
setComment={setMessageText}
isReply={false}
user={user}
replyToUsername={replyToUsername}
submitComment={submitMessage}
isSubmitting={isSubmitting}
enterToSubmitOnDesktop={true}
setRef={setInputRef}
/>
</div>
</div>
)}
</Col>
)
}
const GroupMessage = memo(function GroupMessage_(props: {
user: User | null | undefined
comment: Comment
group: Group
onReplyClick?: (comment: Comment) => void
setRef?: (ref: HTMLDivElement) => void
highlight?: boolean
tips: CommentTips
}) {
const { comment, onReplyClick, group, setRef, highlight, user, tips } = props
const { text, userUsername, userName, userAvatarUrl, createdTime } = comment
const isCreatorsComment = user && comment.userId === user.id
return (
<Col
ref={setRef}
className={clsx(
isCreatorsComment ? 'mr-2 self-end' : '',
'w-fit max-w-sm gap-1 space-x-3 rounded-md bg-white p-1 text-sm text-gray-500 transition-colors duration-1000 sm:max-w-md sm:p-3 sm:leading-[1.3rem]',
highlight ? `-m-1 bg-indigo-500/[0.2] p-2` : ''
)}
>
<Row className={'items-center'}>
{!isCreatorsComment && (
<Col>
<Avatar
className={'mx-2 ml-2.5'}
size={'xs'}
username={userUsername}
avatarUrl={userAvatarUrl}
/>
</Col>
)}
{!isCreatorsComment ? (
<UserLink username={userUsername} name={userName} />
) : (
<span className={'ml-2.5'}>{'You'}</span>
)}
<CopyLinkDateTimeComponent
prefix={'group'}
slug={group.slug}
createdTime={createdTime}
elementId={comment.id}
/>
</Row>
<Row className={'text-black'}>
<TruncatedComment
comment={text}
moreHref={groupPath(group.slug)}
shouldTruncate={false}
/>
</Row>
<Row>
{!isCreatorsComment && onReplyClick && (
<button
className={
'self-start py-1 text-xs font-bold text-gray-500 hover:underline'
}
onClick={() => onReplyClick(comment)}
>
Reply
</button>
)}
{isCreatorsComment && sum(Object.values(tips)) > 0 && (
<span className={'text-primary'}>
{formatMoney(sum(Object.values(tips)))}
</span>
)}
{!isCreatorsComment && <Tipper comment={comment} tips={tips} />}
</Row>
</Col>
)
})

View File

@ -0,0 +1,313 @@
/* eslint-disable react-hooks/exhaustive-deps */
import algoliasearch from 'algoliasearch/lite'
import { Contract } from 'common/contract'
import { Sort, useQueryAndSortParams } from '../hooks/use-sort-and-query-params'
import {
ContractHighlightOptions,
ContractsGrid,
} from './contract/contracts-list'
import { Row } from './layout/row'
import { useEffect, useMemo, useState } from 'react'
import { Spacer } from './layout/spacer'
import { ENV, IS_PRIVATE_MANIFOLD } from 'common/envs/constants'
import { useUser } from 'web/hooks/use-user'
import { useFollows } from 'web/hooks/use-follows'
import { track, trackCallback } from 'web/lib/service/analytics'
import ContractSearchFirestore from 'web/pages/contract-search-firestore'
import { useMemberGroups } from 'web/hooks/use-group'
import { Group, NEW_USER_GROUP_SLUGS } from 'common/group'
import { PillButton } from './buttons/pill-button'
import { range, sortBy } from 'lodash'
import { DEFAULT_CATEGORY_GROUPS } from 'common/categories'
import { Col } from './layout/col'
import SubmissionSearchFirestore from 'web/pages/submission-search-firestore'
import { SubmissionsGrid } from './submission/submission-list'
import { contest_data } from 'common/contest'
// All contest scraping data imports
import { default as causeExploration } from 'web/lib/util/contests/causeExploration.json'
import { getGroupBySlug } from 'web/lib/firebase/groups'
import { getContractFromId } from 'web/lib/firebase/contracts'
import { contractTextDetails } from './contract/contract-details'
import { createMarket } from 'web/lib/firebase/api'
import { removeUndefinedProps } from 'common/util/object'
import dayjs from 'dayjs'
import { useRouter } from 'next/router'
const searchClient = algoliasearch(
'GJQPAYENIF',
'75c28fc084a80e1129d427d470cf41a3'
)
const indexPrefix = ENV === 'DEV' ? 'dev-' : ''
const searchIndexName = ENV === 'DEV' ? 'dev-contracts' : 'contractsIndex'
const sortOptions = [
{ label: 'Newest', value: 'newest' },
{ label: 'Trending', value: 'score' },
{ label: 'Most traded', value: 'most-traded' },
{ label: '24h volume', value: '24-hour-vol' },
{ label: 'Last updated', value: 'last-updated' },
{ label: 'Subsidy', value: 'liquidity' },
{ label: 'Close date', value: 'close-date' },
{ label: 'Resolve date', value: 'resolve-date' },
]
export const DEFAULT_SORT = 'score'
type filter = 'personal' | 'open' | 'closed' | 'resolved' | 'all'
export function SubmissionSearch(props: {
querySortOptions?: {
defaultSort: Sort
defaultFilter?: filter
shouldLoadFromStorage?: boolean
}
additionalFilter: {
creatorId?: string
tag?: string
excludeContractIds?: string[]
contestSlug: string
}
highlightOptions?: ContractHighlightOptions
onContractClick?: (contract: Contract) => void
showPlaceHolder?: boolean
hideOrderSelector?: boolean
overrideGridClassName?: string
cardHideOptions?: {
hideGroupLink?: boolean
hideQuickBet?: boolean
}
}) {
const {
querySortOptions,
additionalFilter,
onContractClick,
overrideGridClassName,
hideOrderSelector,
showPlaceHolder,
cardHideOptions,
highlightOptions,
} = props
const user = useUser()
const router = useRouter()
const { shouldLoadFromStorage, defaultSort } = querySortOptions ?? {}
const { query, setQuery, sort, setSort } = useQueryAndSortParams({
defaultSort,
shouldLoadFromStorage,
})
const [filter, setFilter] = useState<filter>(
querySortOptions?.defaultFilter ?? 'open'
)
const additionalFilters = [
additionalFilter?.contestSlug
? `groupLinks.slug:${additionalFilter.contestSlug}`
: '',
]
let facetFilters = query
? additionalFilters
: [
...additionalFilters,
filter === 'open' ? 'isResolved:false' : '',
filter === 'closed' ? 'isResolved:false' : '',
filter === 'resolved' ? 'isResolved:true' : '',
].filter((f) => f)
// Hack to make Algolia work.
facetFilters = ['', ...facetFilters]
const numericFilters = query
? []
: [
filter === 'open' ? `closeTime > ${Date.now()}` : '',
filter === 'closed' ? `closeTime <= ${Date.now()}` : '',
].filter((f) => f)
const indexName = `${indexPrefix}contracts-${sort}`
const index = useMemo(() => searchClient.initIndex(indexName), [indexName])
const searchIndex = useMemo(
() => searchClient.initIndex(searchIndexName),
[searchIndexName]
)
const [page, setPage] = useState(0)
const [numPages, setNumPages] = useState(1)
const [hitsByPage, setHitsByPage] = useState<{ [page: string]: Contract[] }>(
{}
)
useEffect(() => {
let wasMostRecentQuery = true
const algoliaIndex = query ? searchIndex : index
algoliaIndex
.search(query, {
facetFilters,
numericFilters,
page,
hitsPerPage: 20,
})
.then((results) => {
if (!wasMostRecentQuery) return
if (page === 0) {
setHitsByPage({
[0]: results.hits as any as Contract[],
})
} else {
setHitsByPage((hitsByPage) => ({
...hitsByPage,
[page]: results.hits,
}))
}
setNumPages(results.nbPages)
})
return () => {
wasMostRecentQuery = false
}
// Note numeric filters are unique based on current time, so can't compare
// them by value.
}, [query, page, index, searchIndex, JSON.stringify(facetFilters), filter])
const loadMore = () => {
if (page >= numPages - 1) return
const haveLoadedCurrentPage = hitsByPage[page]
if (haveLoadedCurrentPage) setPage(page + 1)
}
const hits = range(0, page + 1)
.map((p) => hitsByPage[p] ?? [])
.flat()
const contracts = hits.filter(
(c) => !additionalFilter?.excludeContractIds?.includes(c.id)
)
const showTime =
sort === 'close-date' || sort === 'resolve-date' ? sort : undefined
const updateQuery = (newQuery: string) => {
setQuery(newQuery)
setPage(0)
}
const selectFilter = (newFilter: filter) => {
if (newFilter === filter) return
setFilter(newFilter)
setPage(0)
trackCallback('select search filter', { filter: newFilter })
}
const selectSort = (newSort: Sort) => {
if (newSort === sort) return
setPage(0)
setSort(newSort)
track('select sort', { sort: newSort })
}
const contestSlug = additionalFilter?.contestSlug
// Getting all submissions in a group and seeing if there's any new ones from the last scraping
// if so, creates new submission
async function syncSubmissions() {
let scrapedTitles = causeExploration.map((entry) => entry.title)
if (contestSlug) {
let group = await getGroupBySlug(contestSlug).catch((err) => {
return err
})
let questions: string[] = await Promise.all(
group.contractIds.map(async (contractId: string) => {
return (await getContractFromId(contractId))?.question
})
)
scrapedTitles.map(async (title) => {
if (!questions.includes(title)) {
// INGA/TODO: I don't know how to create a market, we should also be creating these markets under some like manifold account so that users aren't creating markets on their own when the backend updates. Pls help
// await createMarket(
// removeUndefinedProps({
// title,
// outcomeType: 'BINARY',
// initialProb: 50,
// groupId: group.id,
// closeTime: dayjs(
// contest_data[contestSlug].closeTime
// ).valueOf(),
// })
// )
}
})
}
}
syncSubmissions()
if (IS_PRIVATE_MANIFOLD || process.env.NEXT_PUBLIC_FIREBASE_EMULATE) {
return (
<SubmissionSearchFirestore
querySortOptions={querySortOptions}
additionalFilter={additionalFilter}
/>
)
}
return (
<Col>
<Row className="gap-1 sm:gap-2">
<input
type="text"
value={query}
onChange={(e) => updateQuery(e.target.value)}
placeholder={showPlaceHolder ? `Search ${filter} markets` : ''}
className="input input-bordered w-full"
/>
{!query && (
<select
className="select select-bordered"
value={filter}
onChange={(e) => selectFilter(e.target.value as filter)}
>
<option value="open">Open</option>
<option value="closed">Closed</option>
<option value="resolved">Resolved</option>
<option value="all">All</option>
</select>
)}
{!hideOrderSelector && !query && (
<select
className="select select-bordered"
value={sort}
onChange={(e) => selectSort(e.target.value as Sort)}
>
{sortOptions.map((option) => (
<option key={option.value} value={option.value}>
{option.label}
</option>
))}
</select>
)}
</Row>
<Spacer h={4} />
<SubmissionsGrid
contracts={contracts}
loadMore={loadMore}
hasMore={true}
showTime={showTime}
onContractClick={onContractClick}
overrideGridClassName={overrideGridClassName}
highlightOptions={highlightOptions}
cardHideOptions={cardHideOptions}
contestSlug={contestSlug}
/>
</Col>
)
}

View File

@ -0,0 +1,316 @@
import clsx from 'clsx'
import Link from 'next/link'
import { Row } from '../layout/row'
import { formatLargeNumber, formatPercent } from 'common/util/format'
import {
contractPath,
getBinaryProbPercent,
submissionPath,
} from 'web/lib/firebase/contracts'
import { Col } from '../layout/col'
import {
BinaryContract,
Contract,
FreeResponseContract,
MultipleChoiceContract,
NumericContract,
PseudoNumericContract,
} from 'common/contract'
import {
AnswerLabel,
BinaryContractOutcomeLabel,
CancelLabel,
FreeResponseOutcomeLabel,
} from '../outcome-label'
import {
getOutcomeProbability,
getProbability,
getTopAnswer,
} from 'common/calculate'
import {
AvatarDetails,
MiscDetails,
ShowTime,
} from '../contract/contract-details'
import { getExpectedValue, getValueFromBucket } from 'common/calculate-dpm'
import { getColor, ProbBar, QuickBet } from '../contract/quick-bet'
import { useContractWithPreload } from 'web/hooks/use-contract'
import { useUser } from 'web/hooks/use-user'
import { track } from '@amplitude/analytics-browser'
import { trackCallback } from 'web/lib/service/analytics'
import { formatNumericProbability } from 'common/pseudo-numeric'
import { Title } from '../title'
import { contest_data } from 'common/contest'
import { default as causeExploration } from 'web/lib/util/contests/causeExploration.json'
//this is super gross, need to figure out how to not hardcode this
function getSubmissionData(contestSlug: string) {
if (contestSlug === 'cause-exploration-prize') {
return causeExploration
}
}
export function SubmissionCard(props: {
contract: Contract
showHotVolume?: boolean
showTime?: ShowTime
className?: string
onClick?: () => void
hideQuickBet?: boolean
hideGroupLink?: boolean
contestSlug: string
}) {
const {
showHotVolume,
showTime,
className,
onClick,
hideQuickBet,
hideGroupLink,
contestSlug,
} = props
const contract = useContractWithPreload(props.contract) ?? props.contract
const { question, outcomeType } = contract
const { resolution } = contract
const user = useUser()
const marketClosed =
(contract.closeTime || Infinity) < Date.now() || !!resolution
const showQuickBet =
user &&
!marketClosed &&
(outcomeType === 'BINARY' || outcomeType === 'PSEUDO_NUMERIC') &&
!hideQuickBet
const submissionData = getSubmissionData(contract.slug)
console.log(submissionData)
return (
<Col className="rounded-lg shadow-md hover:shadow-xl">
{/* <Col
className={clsx(
'relative gap-3 py-4 pl-6 pr-5 shadow-md hover:cursor-pointer',
className
)}
> */}
<Col className="relative flex-1 gap-3 bg-white py-4 pl-6 pr-5">
<div
className={clsx(
'peer absolute -left-6 -top-4 -bottom-4 right-0 z-10'
)}
>
{onClick ? (
<a
className="absolute top-0 left-0 right-0 bottom-0"
href={submissionPath(contract, contestSlug)}
onClick={(e) => {
// Let the browser handle the link click (opens in new tab).
if (e.ctrlKey || e.metaKey) return
e.preventDefault()
track('click market card', {
contestSlug: contestSlug,
submissionSlug: contract.slug,
})
onClick()
}}
/>
) : (
<Link href={submissionPath(contract, contestSlug)}>
<a
onClick={trackCallback('click market card', {
contestSlug: contestSlug,
submissionSlug: contract.slug,
})}
className="absolute top-0 left-0 right-0 bottom-0"
/>
</Link>
)}
</div>
<p
className="break-words font-semibold text-indigo-700 peer-hover:underline peer-hover:decoration-indigo-400 peer-hover:decoration-2"
style={{ /* For iOS safari */ wordBreak: 'break-word' }}
>
{question}
</p>
<Row className="text-greyscale-5 text-sm">
{submissionData?.filter((entry) => entry.title === contract.question)}
</Row>
</Col>
<Row className="bg-greyscale-1 text-greyscale-5 rounded-b-lg py-4 pl-6 pr-5 text-xs">
<Col>
chance of winning a prize
<div className="text-greyscale-7 text-lg font-semibold">
{getBinaryProbPercent(contract)}
</div>
</Col>
</Row>
</Col>
)
}
export function BinaryResolutionOrChance(props: {
contract: BinaryContract
large?: boolean
className?: string
}) {
const { contract, large, className } = props
const { resolution } = contract
const textColor = `text-${getColor(contract)}`
return (
<Col className={clsx(large ? 'text-4xl' : 'text-3xl', className)}>
{resolution ? (
<>
<div
className={clsx('text-gray-500', large ? 'text-xl' : 'text-base')}
>
Resolved
</div>
<BinaryContractOutcomeLabel
contract={contract}
resolution={resolution}
/>
</>
) : (
<>
<div className={textColor}>{getBinaryProbPercent(contract)}</div>
<div className={clsx(textColor, large ? 'text-xl' : 'text-base')}>
chance
</div>
</>
)}
</Col>
)
}
function FreeResponseTopAnswer(props: {
contract: FreeResponseContract | MultipleChoiceContract
truncate: 'short' | 'long' | 'none'
className?: string
}) {
const { contract, truncate } = props
const topAnswer = getTopAnswer(contract)
return topAnswer ? (
<AnswerLabel
className="!text-gray-600"
answer={topAnswer}
truncate={truncate}
/>
) : null
}
export function FreeResponseResolutionOrChance(props: {
contract: FreeResponseContract | MultipleChoiceContract
truncate: 'short' | 'long' | 'none'
className?: string
}) {
const { contract, truncate, className } = props
const { resolution } = contract
const topAnswer = getTopAnswer(contract)
const textColor = `text-${getColor(contract)}`
return (
<Col className={clsx(resolution ? 'text-3xl' : 'text-xl', className)}>
{resolution ? (
<>
<div className={clsx('text-base text-gray-500 sm:hidden')}>
Resolved
</div>
</>
) : (
topAnswer && (
<Row className="items-center gap-6">
<Col className={clsx('text-3xl', textColor)}>
<div>
{formatPercent(getOutcomeProbability(contract, topAnswer.id))}
</div>
<div className="text-base">chance</div>
</Col>
</Row>
)
)}
</Col>
)
}
export function NumericResolutionOrExpectation(props: {
contract: NumericContract
className?: string
}) {
const { contract, className } = props
const { resolution } = contract
const textColor = `text-${getColor(contract)}`
const resolutionValue =
contract.resolutionValue ?? getValueFromBucket(resolution ?? '', contract)
return (
<Col className={clsx(resolution ? 'text-3xl' : 'text-xl', className)}>
{resolution ? (
<>
<div className={clsx('text-base text-gray-500')}>Resolved</div>
{resolution === 'CANCEL' ? (
<CancelLabel />
) : (
<div className="text-blue-400">
{formatLargeNumber(resolutionValue)}
</div>
)}
</>
) : (
<>
<div className={clsx('text-3xl', textColor)}>
{formatLargeNumber(getExpectedValue(contract))}
</div>
<div className={clsx('text-base', textColor)}>expected</div>
</>
)}
</Col>
)
}
export function PseudoNumericResolutionOrExpectation(props: {
contract: PseudoNumericContract
className?: string
}) {
const { contract, className } = props
const { resolution, resolutionValue, resolutionProbability } = contract
const textColor = `text-blue-400`
return (
<Col className={clsx(resolution ? 'text-3xl' : 'text-xl', className)}>
{resolution ? (
<>
<div className={clsx('text-base text-gray-500')}>Resolved</div>
{resolution === 'CANCEL' ? (
<CancelLabel />
) : (
<div className="text-blue-400">
{resolutionValue
? formatLargeNumber(resolutionValue)
: formatNumericProbability(
resolutionProbability ?? 0,
contract
)}
</div>
)}
</>
) : (
<>
<div className={clsx('text-3xl', textColor)}>
{formatNumericProbability(getProbability(contract), contract)}
</div>
<div className={clsx('text-base', textColor)}>expected</div>
</>
)}
</Col>
)
}

View File

@ -0,0 +1,99 @@
import { Contract } from 'web/lib/firebase/contracts'
import { User } from 'web/lib/firebase/users'
import { Col } from '../layout/col'
import { SiteLink } from '../site-link'
import { ContractCard } from '../contract/contract-card'
import { ShowTime } from '../contract/contract-details'
import { ContractSearch } from '../contract-search'
import { useIsVisible } from 'web/hooks/use-is-visible'
import { useEffect, useState } from 'react'
import clsx from 'clsx'
import { SubmissionCard } from './submission-card'
import { SubmissionSearch } from '../submission-search'
export type ContractHighlightOptions = {
contractIds?: string[]
highlightClassName?: string
}
export function SubmissionsGrid(props: {
contracts: Contract[]
loadMore: () => void
hasMore: boolean
showTime?: ShowTime
onContractClick?: (contract: Contract) => void
overrideGridClassName?: string
cardHideOptions?: {
hideQuickBet?: boolean
hideGroupLink?: boolean
}
highlightOptions?: ContractHighlightOptions
contestSlug: string
}) {
const {
contracts,
showTime,
hasMore,
loadMore,
onContractClick,
overrideGridClassName,
cardHideOptions,
highlightOptions,
contestSlug,
} = props
const { hideQuickBet, hideGroupLink } = cardHideOptions || {}
const { contractIds, highlightClassName } = highlightOptions || {}
const [elem, setElem] = useState<HTMLElement | null>(null)
const isBottomVisible = useIsVisible(elem)
useEffect(() => {
if (isBottomVisible && hasMore) {
loadMore()
}
}, [isBottomVisible, hasMore, loadMore])
if (contracts.length === 0) {
return (
<p className="mx-2 text-gray-500">
No markets found. Why not{' '}
<SiteLink href="/create" className="font-bold text-gray-700">
create one?
</SiteLink>
</p>
)
}
return (
<Col className="gap-8">
<ul
className={clsx(
overrideGridClassName
? overrideGridClassName
: 'grid w-full grid-cols-1 gap-4 md:grid-cols-2'
)}
>
{contracts.map((contract) => (
<SubmissionCard
contract={contract}
key={contract.id}
showTime={showTime}
onClick={
onContractClick ? () => onContractClick(contract) : undefined
}
hideQuickBet={hideQuickBet}
hideGroupLink={hideGroupLink}
className={
contractIds?.includes(contract.id)
? highlightClassName
: undefined
}
contestSlug={contestSlug}
/>
))}
</ul>
<div ref={setElem} className="relative -top-96 h-1" />
</Col>
)
}

View File

@ -0,0 +1,214 @@
import {
deleteDoc,
doc,
getDocs,
query,
updateDoc,
where,
} from 'firebase/firestore'
import { sortBy, uniq } from 'lodash'
import { Group, GROUP_CHAT_SLUG, GroupLink } from 'common/group'
import { updateContract } from './contracts'
import {
coll,
getValue,
getValues,
listenForValue,
listenForValues,
} from './utils'
import { Contract } from 'common/contract'
export const groups = coll<Group>('groups')
export function contestPath(
contestSlug: string,
subpath?:
| 'edit'
| 'submissions'
| 'about'
| typeof GROUP_CHAT_SLUG
| 'leaderboards'
) {
return `/contest/${contestSlug}${subpath ? `/${subpath}` : ''}`
}
export function updateGroup(group: Group, updates: Partial<Group>) {
return updateDoc(doc(groups, group.id), updates)
}
export function deleteGroup(group: Group) {
return deleteDoc(doc(groups, group.id))
}
export async function listAllGroups() {
return getValues<Group>(groups)
}
export async function listGroups(groupSlugs: string[]) {
return Promise.all(groupSlugs.map(getGroupBySlug))
}
export function listenForGroups(setGroups: (groups: Group[]) => void) {
return listenForValues(groups, setGroups)
}
export function getGroup(groupId: string) {
return getValue<Group>(doc(groups, groupId))
}
export async function getGroupBySlug(slug: string) {
const q = query(groups, where('slug', '==', slug))
const docs = (await getDocs(q)).docs
return docs.length === 0 ? null : docs[0].data()
}
export function listenForGroup(
groupId: string,
setGroup: (group: Group | null) => void
) {
return listenForValue(doc(groups, groupId), setGroup)
}
export function listenForMemberGroups(
userId: string,
setGroups: (groups: Group[]) => void,
sort?: { by: 'mostRecentChatActivityTime' | 'mostRecentContractAddedTime' }
) {
const q = query(groups, where('memberIds', 'array-contains', userId))
const sorter = (group: Group) => {
if (sort?.by === 'mostRecentChatActivityTime') {
return group.mostRecentChatActivityTime ?? group.createdTime
}
if (sort?.by === 'mostRecentContractAddedTime') {
return group.mostRecentContractAddedTime ?? group.createdTime
}
return group.mostRecentActivityTime
}
return listenForValues<Group>(q, (groups) => {
const sorted = sortBy(groups, [(group) => -sorter(group)])
setGroups(sorted)
})
}
export async function listenForGroupsWithContractId(
contractId: string,
setGroups: (groups: Group[]) => void
) {
const q = query(groups, where('contractIds', 'array-contains', contractId))
return listenForValues<Group>(q, setGroups)
}
export async function addUserToGroupViaId(groupId: string, userId: string) {
// get group to get the member ids
const group = await getGroup(groupId)
if (!group) {
console.error(`Group not found: ${groupId}`)
return
}
return await joinGroup(group, userId)
}
export async function joinGroup(group: Group, userId: string): Promise<void> {
const { memberIds } = group
if (memberIds.includes(userId)) return // already a member
const newMemberIds = [...memberIds, userId]
return await updateGroup(group, { memberIds: uniq(newMemberIds) })
}
export async function leaveGroup(group: Group, userId: string): Promise<void> {
const { memberIds } = group
if (!memberIds.includes(userId)) return // not a member
const newMemberIds = memberIds.filter((id) => id !== userId)
return await updateGroup(group, { memberIds: uniq(newMemberIds) })
}
export async function addContractToGroup(
group: Group,
contract: Contract,
userId: string
) {
if (!contract.groupLinks?.map((l) => l.groupId).includes(group.id)) {
const newGroupLinks = [
...(contract.groupLinks ?? []),
{
groupId: group.id,
createdTime: Date.now(),
slug: group.slug,
userId,
name: group.name,
} as GroupLink,
]
await updateContract(contract.id, {
groupSlugs: uniq([...(contract.groupSlugs ?? []), group.slug]),
groupLinks: newGroupLinks,
})
}
if (!group.contractIds.includes(contract.id)) {
return await updateGroup(group, {
contractIds: uniq([...group.contractIds, contract.id]),
})
.then(() => group)
.catch((err) => {
console.error('error adding contract to group', err)
return err
})
}
}
export async function removeContractFromGroup(
group: Group,
contract: Contract
) {
if (contract.groupLinks?.map((l) => l.groupId).includes(group.id)) {
const newGroupLinks = contract.groupLinks?.filter(
(link) => link.slug !== group.slug
)
await updateContract(contract.id, {
groupSlugs:
contract.groupSlugs?.filter((slug) => slug !== group.slug) ?? [],
groupLinks: newGroupLinks ?? [],
})
}
if (group.contractIds.includes(contract.id)) {
const newContractIds = group.contractIds.filter((id) => id !== contract.id)
return await updateGroup(group, {
contractIds: uniq(newContractIds),
})
.then(() => group)
.catch((err) => {
console.error('error removing contract from group', err)
return err
})
}
}
export async function setContractGroupLinks(
group: Group,
contractId: string,
userId: string
) {
await updateContract(contractId, {
groupSlugs: [group.slug],
groupLinks: [
{
groupId: group.id,
name: group.name,
slug: group.slug,
userId,
createdTime: Date.now(),
} as GroupLink,
],
})
return await updateGroup(group, {
contractIds: uniq([...group.contractIds, contractId]),
})
.then(() => group)
.catch((err) => {
console.error('error adding contract to group', err)
return err
})
}

View File

@ -31,6 +31,10 @@ export const contracts = coll<Contract>('contracts')
export type { Contract }
export function submissionPath(submission: Contract, contestSlug: string) {
return `/contest/${contestSlug}/${submission.slug}`
}
export function contractPath(contract: Contract) {
return `/${contract.creatorUsername}/${contract.slug}`
}

View File

@ -0,0 +1,672 @@
[
{
"title": "Open Philanthropy's Cause Exploration Prizes: $120k for written work on global health and wellbeing",
"author": "ChrisSmith",
"link": "https://forum.effectivealtruism.org/posts/iqcph4DbcP4PZGyDB/open-philanthropy-s-cause-exploration-prizes-usd120k-for"
},
{
"title": "New cause area: Violence against women and girls",
"author": "Akhil",
"link": "https://forum.effectivealtruism.org/posts/majcwf7i8pW8eMJ3v/new-cause-area-violence-against-women-and-girls"
},
{
"title": "Road Safety: The Silent Epidemic Impacting Youth",
"author": "AIPFoundation",
"link": "https://forum.effectivealtruism.org/posts/8jkYgxH9pYcHrgZqT/road-safety-the-silent-epidemic-impacting-youth"
},
{
"title": "To WELLBY or not to WELLBY? Measuring non-health, non-pecuniary benefits using subjective wellbeing",
"author": "JoelMcGuire",
"link": "https://forum.effectivealtruism.org/posts/dk48Sn6hpbMWeJo4G/to-wellby-or-not-to-wellby-measuring-non-health-non"
},
{
"title": "Family Planning: A Significant Opportunity for Impact",
"author": "Sarah H",
"link": "https://forum.effectivealtruism.org/posts/zgBmSgyWECJcbhmpc/family-planning-a-significant-opportunity-for-impact"
},
{
"title": "Cause area: Short-sleeper genes",
"author": "JohnBoyle",
"link": "https://forum.effectivealtruism.org/posts/nSwaDrHunt3ohh9Et/cause-area-short-sleeper-genes"
},
{
"title": "Cause Area: Differential Neurotechnology Development",
"author": "mwcvitkovic",
"link": "https://forum.effectivealtruism.org/posts/Qhn5nyRf93dsXodsw/cause-area-differential-neurotechnology-development"
},
{
"title": "Cause exploration prize: organophosphate pesticides and other neurotoxicants",
"author": "Ben Stewart",
"link": "https://forum.effectivealtruism.org/posts/LSDZ22GFryC3dhWvd/cause-exploration-prize-organophosphate-pesticides-and-other"
},
{
"title": "War Between the US and China: A case study for epistemic challenges around China-related catastrophic risk",
"author": "Jordan_Schneider",
"link": "https://forum.effectivealtruism.org/posts/E2BghQq9pwPgtHgiH/war-between-the-us-and-china-a-case-study-for-epistemic"
},
{
"title": "The (California) case for State Capacity as an EA cause area",
"author": "Locke",
"link": "https://forum.effectivealtruism.org/posts/wBre7Rm6tBzKbZ86B/the-california-case-for-state-capacity-as-an-ea-cause-area"
},
{
"title": "Directly Purchasing and Distributing Stunning Equipment to Fishing Boats Which Catch Enormous Amounts of Small Wild Fish",
"author": "Enginar",
"link": "https://forum.effectivealtruism.org/posts/tykEYESbJkqT39v64/directly-purchasing-and-distributing-stunning-equipment-to"
},
{
"title": "Doing good is a privilege. This needs to change if we want to do good long-term. ",
"author": "SofiaBalderson",
"link": "https://forum.effectivealtruism.org/posts/gicYG5ymk4pPzrKAd/doing-good-is-a-privilege-this-needs-to-change-if-we-want-to"
},
{
"title": "Cause Exploration Prizes: Could New Technology Help Solve the Glasses Problem?",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/a3vbQCgxTeYNvQBfc/cause-exploration-prizes-could-new-technology-help-solve-the"
},
{
"title": "New cause area: training health workers to prevent newborn deaths",
"author": "Marshall",
"link": "https://forum.effectivealtruism.org/posts/B7wohgDDdwPoQAatt/new-cause-area-training-health-workers-to-prevent-newborn"
},
{
"title": "Cause area proposal: International Macroeconomic Policy",
"author": "arushigupta",
"link": "https://forum.effectivealtruism.org/posts/gqzecJGYjqRF6c8o6/cause-area-proposal-international-macroeconomic-policy"
},
{
"title": "Fix Prison Telecom",
"author": "Benj Azose",
"link": "https://forum.effectivealtruism.org/posts/z9esvCk8oha69vkbA/fix-prison-telecom"
},
{
"title": "Potential new cause area: Obesity",
"author": "Akhil",
"link": "https://forum.effectivealtruism.org/posts/jhsXxPnKbwzLwrKFq/potential-new-cause-area-obesity"
},
{
"title": "Large-scale International Educational Migration: A Shallow Investigation",
"author": "Johannes Haushofer",
"link": "https://forum.effectivealtruism.org/posts/TMjRuTLjQa6z6rdeY/large-scale-international-educational-migration-a-shallow"
},
{
"title": "The Case for Making Professional Degrees Undergraduate Degrees",
"author": "ColdButtonIssues",
"link": "https://forum.effectivealtruism.org/posts/fEMpAcNycbXpp6Ext/the-case-for-making-professional-degrees-undergraduate"
},
{
"title": "Shareholder activism",
"author": "sbehmer",
"link": "https://forum.effectivealtruism.org/posts/fqf4vgCWebTszvHm9/shareholder-activism"
},
{
"title": "Global Health & Development - Beyond the Streetlight",
"author": "Richard Sedlmayr",
"link": "https://forum.effectivealtruism.org/posts/DXKWHAkihdb6nkKyG/global-health-and-development-beyond-the-streetlight-1"
},
{
"title": "[Cause Exploration Prizes] Voting Methods",
"author": "Marcus_Ogren",
"link": "https://forum.effectivealtruism.org/posts/QCHLkgudfgbovgoan/cause-exploration-prizes-voting-methods"
},
{
"title": "Resilience & Biodiversity",
"author": "emwalz",
"link": "https://forum.effectivealtruism.org/posts/5iuyqnm2uKcutbaku/resilience-and-biodiversity"
},
{
"title": "Maritime capability and post-catastrophe resilience.",
"author": "Tom Gardiner",
"link": "https://forum.effectivealtruism.org/posts/nKDBhWFj3vwwFKwGC/maritime-capability-and-post-catastrophe-resilience-1"
},
{
"title": "Water, sanitation and hygiene (“WASH”) interventions as a cause area",
"author": "helmetedhornbill",
"link": "https://forum.effectivealtruism.org/posts/WAbjLFkpSoA7FDvTD/water-sanitation-and-hygiene-wash-interventions-as-a-cause"
},
{
"title": "Open Philanthropy should fund the abundance agenda movement",
"author": "ruthgrace",
"link": "https://forum.effectivealtruism.org/posts/BskvBk5zRfbHGNFKz/open-philanthropy-should-fund-the-abundance-agenda-movement"
},
{
"title": "Internal Migration: A Cost-Effective Method for Raising Wages, Improving Living Standards, and Promoting Economic Growth",
"author": "JamieSimonson",
"link": "https://forum.effectivealtruism.org/posts/dEfBDJXNnMzq7s955/internal-migration-a-cost-effective-method-for-raising-wages"
},
{
"title": "Cause area: climate adaptation in low-income countries",
"author": "Karthik Tadepalli",
"link": "https://forum.effectivealtruism.org/posts/nE827LwrRk5ep3Xao/cause-area-climate-adaptation-in-low-income-countries"
},
{
"title": "New Cause Area: Demographic Collapse",
"author": "Malcolm Collins",
"link": "https://forum.effectivealtruism.org/posts/vFfoqL74kmZbydKjp/new-cause-area-demographic-collapse"
},
{
"title": "[Cause Exploration Prizes] Economic Growth and State Capacity ",
"author": "Jeffrey Mason",
"link": "https://forum.effectivealtruism.org/posts/BkJepw5R2pFc55LEc/cause-exploration-prizes-economic-growth-and-state-capacity"
},
{
"title": "Energy Access in Sub-Saharan Africa: Open Philanthropy Cause Exploration Prize Submission",
"author": "Tomer_Goloboy",
"link": "https://forum.effectivealtruism.org/posts/ZPjMemurtzeumwcdw/energy-access-in-sub-saharan-africa-open-philanthropy-cause"
},
{
"title": "Peacebuilding and Violent Conflict",
"author": "Charlie Dougherty",
"link": "https://forum.effectivealtruism.org/posts/dPx7LiNp5MX9RWdfa/peacebuilding-and-violent-conflict"
},
{
"title": "[Cause Exploration Prizes] Training experts to be forecasters",
"author": "Sam Abbott",
"link": "https://forum.effectivealtruism.org/posts/WFbf2d4LHjgvWJCus/cause-exploration-prizes-training-experts-to-be-forecasters"
},
{
"title": "Why Genetic Rescue",
"author": "David Lang",
"link": "https://forum.effectivealtruism.org/posts/ebBPcDxtSckRAoJfo/why-genetic-rescue"
},
{
"title": "Targeted Treatment of Anemia in Adolescents in India as a Cause Area",
"author": "Akash Kulgod",
"link": "https://forum.effectivealtruism.org/posts/SgqBAeoCbQeLxmMoj/targeted-treatment-of-anemia-in-adolescents-in-india-as-a"
},
{
"title": "[Cause Exploration Prizes] Fix the Money, Fix the world",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/Kg7KixqEHWBctJ4az/cause-exploration-prizes-fix-the-money-fix-the-world"
},
{
"title": "[Cause Exploration Prizes] More Animal Advocacy R&D",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/sCQBJhcNZ4Ye36Cni/cause-exploration-prizes-more-animal-advocacy-r-and-d"
},
{
"title": "[Cause Exploration Prizes] The importance of Intercausal Impacts",
"author": "Sebastian Joy 樂百善",
"link": "https://forum.effectivealtruism.org/posts/MayveXrHbvXMBRo78/cause-exploration-prizes-the-importance-of-intercausal"
},
{
"title": "Cause Exploration: Child and Adolescent Mental Health in LMICs",
"author": "Shen Javier",
"link": "https://forum.effectivealtruism.org/posts/vvwS2YdhCFqNSsoBv/cause-exploration-child-and-adolescent-mental-health-in"
},
{
"title": "Mind Enhancement Cause Exploration",
"author": "timfarkas",
"link": "https://forum.effectivealtruism.org/posts/hGY3eErGzEef7Ck64/mind-enhancement-cause-exploration"
},
{
"title": "New Cause: Radio Ads Against Cousin Marriage in LMIC",
"author": "Jackson Wagner",
"link": "https://forum.effectivealtruism.org/posts/h8iqvzGQJ9HiRTRja/new-cause-radio-ads-against-cousin-marriage-in-lmic"
},
{
"title": "Cause Exploration Prizes submission: bivalve aquaculture",
"author": "Brian Lui",
"link": "https://forum.effectivealtruism.org/posts/7keuWWMoYY6dMnqys/cause-exploration-prizes-submission-bivalve-aquaculture"
},
{
"title": "[Cause Exploration Prizes] Jhana meditation",
"author": "Milan_Griffes",
"link": "https://forum.effectivealtruism.org/posts/XhD9ooZeJcQD8QJZL/cause-exploration-prizes-jhana-meditation"
},
{
"title": "Cause Exploration Prizes: Expanding access to infertility services in Low- and Middle-Income Countries (LMICs)",
"author": "Soleine Scotney",
"link": "https://forum.effectivealtruism.org/posts/WAnJw5bhuQwhJiLTm/cause-exploration-prizes-expanding-access-to-infertility"
},
{
"title": "Social Relationships: A Neglected Factor in Wellbeing",
"author": "Minh Nguyen",
"link": "https://forum.effectivealtruism.org/posts/kF9aBCGrq3FwENaXM/social-relationships-a-neglected-factor-in-wellbeing"
},
{
"title": "Cause Exploration Prizes: Reducing Suffering and Long Term Risk in Common Law Nations via Strategic Case Law Funding",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/C6urjnDeKjHGwf2M3/cause-exploration-prizes-reducing-suffering-and-long-term"
},
{
"title": "One Million Missing Children",
"author": "ColdButtonIssues",
"link": "https://forum.effectivealtruism.org/posts/H5LDwwmdBYBDNXTq4/one-million-missing-children"
},
{
"title": "[Cause Exploration Prizes] Social and Behavioral Science R&D",
"author": "Anna Harvey",
"link": "https://forum.effectivealtruism.org/posts/var4x7y3TfeAYgLH5/cause-exploration-prizes-social-and-behavioral-science-r-and"
},
{
"title": "Long Covid: mass disability and broad societal consequences [Cause Exploration Prizes] ",
"author": "SiebeRozendal",
"link": "https://forum.effectivealtruism.org/posts/njgRDx5cKtSM8JubL/long-covid-mass-disability-and-broad-societal-consequences"
},
{
"title": "[Cause Exploration Prizes] Why we should work on preventing suicide",
"author": "Lydia Field",
"link": "https://forum.effectivealtruism.org/posts/wfgtdTdmvwxfXzyya/cause-exploration-prizes-why-we-should-work-on-preventing"
},
{
"title": "Sleep: Open Philanthropy Cause Exploration Prize",
"author": "SuhanKacholia",
"link": "https://forum.effectivealtruism.org/posts/qnDBN3nAXgwyTnrAC/sleep-open-philanthropy-cause-exploration-prize"
},
{
"title": "NEW GLOBAL POOLS: IMPACT FUNDS ",
"author": "TPogge",
"link": "https://forum.effectivealtruism.org/posts/J8fwT9cZd6x5eED3e/new-global-pools-impact-funds"
},
{
"title": "New cause area: Traffic congestion",
"author": "JeremyR",
"link": "https://forum.effectivealtruism.org/posts/63nXdEwa53HiCc8Ci/new-cause-area-traffic-congestion-1"
},
{
"title": "[Cause Exploration Prizes] Human Engram Preservation as a Neglected Cause Area",
"author": "aurellem",
"link": "https://forum.effectivealtruism.org/posts/j8GYqBJavn5vwDFj6/cause-exploration-prizes-human-engram-preservation-as-a"
},
{
"title": "[Cause Exploration Prizes] Rich to Poor Country Spillovers",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/iZagToiirYgqiX3XR/cause-exploration-prizes-rich-to-poor-country-spillovers"
},
{
"title": "[Cause Exploration Prizes] Reducing global childhood sexual abuse",
"author": "Thomas_Reilly",
"link": "https://forum.effectivealtruism.org/posts/7LGg2u8v2ebQe9nxn/cause-exploration-prizes-reducing-global-childhood-sexual"
},
{
"title": "Saving lives near the precipice: we're doing it wrong?",
"author": "Samin",
"link": "https://forum.effectivealtruism.org/posts/hz2Q8GgZ28YKLazGb/saving-lives-near-the-precipice-we-re-doing-it-wrong"
},
{
"title": "Cause Exploration: Governance Design & Formation",
"author": "RoboTeddy",
"link": "https://forum.effectivealtruism.org/posts/ue9qrxXPLfGxNssvX/cause-exploration-governance-design-and-formation"
},
{
"title": "The Economic Benefits of Promoting and Protecting the Rights of LGBTQ+ Communities in Developing Countries",
"author": "Susannah Hares",
"link": "https://forum.effectivealtruism.org/posts/nW7itcuaqb2CrC2mC/the-economic-benefits-of-promoting-and-protecting-the-rights-1"
},
{
"title": "[Cause Exploration Prizes] Obstetric Violence",
"author": "Tracy Brinkerhoff",
"link": "https://forum.effectivealtruism.org/posts/MWWFiZfBvryY8buTw/cause-exploration-prizes-obstetric-violence"
},
{
"title": "[Cause Exploration Prizes] Trust and Science",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/G6gzgAvrvjkjfBsQj/cause-exploration-prizes-trust-and-science"
},
{
"title": "[Cause Exploration Prizes] Farmed Animal Welfare in Sub-Saharan Africa",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/a4sWmWNufYvAjimNg/cause-exploration-prizes-farmed-animal-welfare-in-sub"
},
{
"title": "[Cause Exploration Prizes] Longer, healthier lives: public engagement around ageing and health",
"author": "Patrick Wilson",
"link": "https://forum.effectivealtruism.org/posts/dKKa2nwposmKKg3pM/cause-exploration-prizes-longer-healthier-lives-public"
},
{
"title": "[Cause Exploration Prizes] Software Systems for Collective Intelligence",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/gttFbbRgTqZtwxDto/cause-exploration-prizes-software-systems-for-collective"
},
{
"title": "[Cause Exploration Prizes] Fix Prison Telecoms",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/dZswSuy59icPkhC6b/cause-exploration-prizes-fix-prison-telecoms"
},
{
"title": "[Cause Exploration Prizes] Sickle Cell Disease",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/rvACMsMmmDonNhskD/cause-exploration-prizes-sickle-cell-disease"
},
{
"title": "A platform for on-demand vaccination",
"author": "George3d6",
"link": "https://forum.effectivealtruism.org/posts/rS2zWRDxw5vZwdQAC/a-platform-for-on-demand-vaccination"
},
{
"title": "[Cause Exploration Prizes] Voluntary Family Planning",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/Kneivf7uokqqNTFAM/cause-exploration-prizes-voluntary-family-planning"
},
{
"title": "[Cause Exploration Prizes] Antimicrobial Resistance",
"author": "rhi",
"link": "https://forum.effectivealtruism.org/posts/Jcnjwv6pHrqT2igRu/cause-exploration-prizes-antimicrobial-resistance"
},
{
"title": "[Cause Exploration Prizes] Natural Disaster Preparedness and Research",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/ppSun8EaDPsAQyH3B/cause-exploration-prizes-natural-disaster-preparedness-and"
},
{
"title": "[Cause Exploration Prizes] Early Childhood Education",
"author": "Anne Fitzpatrick",
"link": "https://forum.effectivealtruism.org/posts/WiCEyhm2gp74pphHB/cause-exploration-prizes-early-childhood-education"
},
{
"title": "[Cause Exploration Prizes] Lessons from Covid",
"author": "Marcel Müller",
"link": "https://forum.effectivealtruism.org/posts/5FMsC9nXZdSDsigBT/cause-exploration-prizes-lessons-from-covid"
},
{
"title": "Cause: Reducing Judicial Delay in India",
"author": "Vastav Ratra",
"link": "https://forum.effectivealtruism.org/posts/JcYyLfbnbhANCJdbv/cause-reducing-judicial-delay-in-india"
},
{
"title": "[Cause Exploration Prizes] Measuring civic engagement - an important yet undervalued well-being metric?",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/GiW8rvdcNHYJnSnK3/cause-exploration-prizes-measuring-civic-engagement-an"
},
{
"title": "Movable Virtual Fencing Systems and Livestock Welfare",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/WexugYE3z8xHhYw4r/movable-virtual-fencing-systems-and-livestock-welfare"
},
{
"title": "[Cause Exploration Prizes] Voluntary Male Circumcision in the prevention of HIV in Nyanza and Western Regions of Kenya",
"author": "Edward Kusewa",
"link": "https://forum.effectivealtruism.org/posts/6nxbe5AxtpH2Fjaqj/cause-exploration-prizes-voluntary-male-circumcision-in-the"
},
{
"title": "[Cause Exploration Prizes] Advanced Market Commitments for public goods",
"author": "Ben Yeoh",
"link": "https://forum.effectivealtruism.org/posts/LFFWkoeAhXRF4HBwW/cause-exploration-prizes-advanced-market-commitments-for"
},
{
"title": "[Cause Exploration Prizes] Antimicrobial Resistance",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/DELryFuR7pNjwRZZC/cause-exploration-prizes-antimicrobial-resistance-1"
},
{
"title": "[Cause Exploration Prizes] Transportation Issues in Developing Countries",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/6mY2uJmGzmfyYzQ2z/cause-exploration-prizes-transportation-issues-in-developing"
},
{
"title": "[Cause Exploration Prizes] Tuberculosis",
"author": "jserv",
"link": "https://forum.effectivealtruism.org/posts/9HJKrGNgk2FCGapso/cause-exploration-prizes-tuberculosis"
},
{
"title": "[Cause Exploration Prizes] Targeting cardiovascular disease in the developing world",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/zSmnWHjBkdPNJSbiN/cause-exploration-prizes-targeting-cardiovascular-disease-in"
},
{
"title": "[Cause Exploration Prizes] Everyday Peace Indicators: An effective tool for measuring hard to measure social concepts",
"author": "Pamina Firchow",
"link": "https://forum.effectivealtruism.org/posts/XNkzixN6qhp2ePcvi/cause-exploration-prizes-everyday-peace-indicators-an"
},
{
"title": "[Cause Exploration Prizes] From Energy Deprived Poor Africa",
"author": "Juspermachogu",
"link": "https://forum.effectivealtruism.org/posts/dA6tGKnGaynddwxwL/cause-exploration-prizes-from-energy-deprived-poor-africa"
},
{
"title": "[Cause Exploration Prizes] Mental health diagnostic system",
"author": "EmmiPosio",
"link": "https://forum.effectivealtruism.org/posts/99jXtmycKiwpY653a/cause-exploration-prizes-mental-health-diagnostic-system"
},
{
"title": "[Cause Exploration Prizes] Open Access Technology for the Developing World",
"author": "Nathan Sidney",
"link": "https://forum.effectivealtruism.org/posts/ZxF9gYQ4kXubrk2jA/cause-exploration-prizes-open-access-technology-for-the"
},
{
"title": "[Cause Exploration Prizes] Emergence research as a high-impact cause area",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/iapfxkhbE8vRk5rKX/cause-exploration-prizes-emergence-research-as-a-high-impact"
},
{
"title": "Quality matters: Early childhood education and development in Nepal",
"author": "Alisha Karki",
"link": "https://forum.effectivealtruism.org/posts/nG8Ncf4AHCgreakzy/quality-matters-early-childhood-education-and-development-in"
},
{
"title": "[Cause Exploration Prizes] Creating a “regulatory turbocharger” for EA relevant policies",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/Ph22HqekBwKyQGawq/cause-exploration-prizes-creating-a-regulatory-turbocharger"
},
{
"title": "[Cause Exploration Prizes] Effective Altruistic Economic Model",
"author": "Thomas (Tom) Schwendener",
"link": "https://forum.effectivealtruism.org/posts/7Sqe9mDJwwARC3Nua/cause-exploration-prizes-effective-altruistic-economic-model"
},
{
"title": "[Cause Exploration Prizes] Shortage of pediatricians in Africa and South-East Asia",
"author": "Rachel_chen",
"link": "https://forum.effectivealtruism.org/posts/RbqqA5T4QaXjqkbiq/cause-exploration-prizes-shortage-of-pediatricians-in-africa"
},
{
"title": "[Cause Exploration Prizes] Measuring Happiness",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/GaGkgEmRh4XpatGCm/cause-exploration-prizes-measuring-happiness"
},
{
"title": "[Cause Exploration Prizes] Legal Efforts to Increase American Kidney Donations",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/q2EJQ7p6bJaSpE3hN/cause-exploration-prizes-legal-efforts-to-increase-american"
},
{
"title": "[Cause Exploration Prizes] Investment in Fetal, Neonatal and Infant Development ",
"author": "Sofia Panasiuk",
"link": "https://forum.effectivealtruism.org/posts/DdGdEWHu8kebS6mJu/cause-exploration-prizes-investment-in-fetal-neonatal-and"
},
{
"title": "[Cause Exploration Prizes] Can purpose in life be a simple, powerful, and systemic leverage point for positive change?",
"author": "Kokeb Solomon",
"link": "https://forum.effectivealtruism.org/posts/KqffgESkpTQBeqaWy/cause-exploration-prizes-can-purpose-in-life-be-a-simple"
},
{
"title": "[Cause Exploration Prizes] Increasing Cause Area Impact Leverage via Empowerment of Communities",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/tpHJj77dKDMWcdabp/cause-exploration-prizes-increasing-cause-area-impact"
},
{
"title": "[Cause Exploration Prizes] Dynamic democracy to guard against authoritarian lock-in",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/G5tF3TP7btJThcKoJ/cause-exploration-prizes-dynamic-democracy-to-guard-against"
},
{
"title": "[Cause Exploration Prizes] Expanding Circles, Improving Lives",
"author": "Chad Patrick Osorio",
"link": "https://forum.effectivealtruism.org/posts/At5eJJxafx6kcQWty/cause-exploration-prizes-expanding-circles-improving-lives"
},
{
"title": "Open Climate Data as a possible cause area, Open Philanthropy",
"author": "Ben Yeoh",
"link": "https://forum.effectivealtruism.org/posts/s9HPpvMHgS5QYEM4C/open-climate-data-as-a-possible-cause-area-open-philanthropy"
},
{
"title": "In Support of Paradigm Shifting",
"author": "helmetedhornbill",
"link": "https://forum.effectivealtruism.org/posts/babM7nAHnrWSmL4pC/in-support-of-paradigm-shifting"
},
{
"title": "[Cause Exploration Prizes] Homeless Relief",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/mNrZPoTmoseoFBXGd/cause-exploration-prizes-homeless-relief"
},
{
"title": "A Fair Vote Can Change the World",
"author": "Rob Richie",
"link": "https://forum.effectivealtruism.org/posts/6AFNCgTvkxysBpgi8/a-fair-vote-can-change-the-world"
},
{
"title": "Cause area: Developmental Cognitive Neuroepidemiology",
"author": "Hauke Hillebrandt",
"link": "https://forum.effectivealtruism.org/posts/m2tgGev5XpkTkvERL/cause-area-developmental-cognitive-neuroepidemiology-1"
},
{
"title": "Mitigating chicken and fish suffering by closing the “dairy gap” in Asia and Africa - Shorter Version",
"author": "Enginar",
"link": "https://forum.effectivealtruism.org/posts/dHJCvmPKY5HDaX2S6/mitigating-chicken-and-fish-suffering-by-closing-the-dairy"
},
{
"title": "New Cause area: The Meta-Cause [Cause Exploration Prize]",
"author": "simeon_c",
"link": "https://forum.effectivealtruism.org/posts/9t8c69fdrK9LycxxP/new-cause-area-the-meta-cause-cause-exploration-prize-10"
},
{
"title": "Cause: biopharma R&D productivity",
"author": "BoxFan",
"link": "https://forum.effectivealtruism.org/posts/xzcdN6aGCGbii86BX/cause-biopharma-r-and-d-productivity"
},
{
"title": "Cause Area Proposal: Paperwork Reduction",
"author": "Ja3k",
"link": "https://forum.effectivealtruism.org/posts/cp6R26srno75WH2AD/cause-area-proposal-paperwork-reduction"
},
{
"title": "New cause area: maternal morbidity",
"author": "alexhill",
"link": "https://forum.effectivealtruism.org/posts/pxrN28gfn26Z7dzch/new-cause-area-maternal-morbidity"
},
{
"title": "Cause Exploration: Adapting to Extreme Heat Exposure in South Asia",
"author": "Surbhi B",
"link": "https://forum.effectivealtruism.org/posts/g7Rn2fiq52QN8pbJa/cause-exploration-adapting-to-extreme-heat-exposure-in-south"
},
{
"title": "New cause area: Improving diagnosis and treatment of bipolar spectrum disorders",
"author": "Karolina Soltys",
"link": "https://forum.effectivealtruism.org/posts/ft7ChZnzyq2SwsgBa/new-cause-area-improving-diagnosis-and-treatment-of-bipolar"
},
{
"title": "[Cause Exploration Prizes] Transnational Surrogacy",
"author": "Kelly Geddes",
"link": "https://forum.effectivealtruism.org/posts/uRk85GQh4x8gTgMEm/cause-exploration-prizes-transnational-surrogacy"
},
{
"title": "Deadline extension (to August 11) for Open Philanthropy's Cause Exploration Prizes",
"author": "ChrisSmith",
"link": "https://forum.effectivealtruism.org/posts/WdMbmLfb7DMMYHvKf/deadline-extension-to-august-11-for-open-philanthropy-s"
},
{
"title": "Cause exploration: improving wild fish slaughter [half-baked, post-deadline]",
"author": "Aaron Bergman",
"link": "https://forum.effectivealtruism.org/posts/JsuefG6PurSxacXds/cause-exploration-improving-wild-fish-slaughter-half-baked"
},
{
"title": "Should we do more to mitigate occupational noise exposure?",
"author": "Drew Housman",
"link": "https://forum.effectivealtruism.org/posts/HN6QuXntDkkpoQDad/should-we-do-more-to-mitigate-occupational-noise-exposure"
},
{
"title": "Cause Exploration Prize: Distribution of Information Among Humans",
"author": "markus_over",
"link": "https://forum.effectivealtruism.org/posts/ad2kEQmbERsAnJ4zc/cause-exploration-prize-distribution-of-information-among"
},
{
"title": "Cause Exploration Prizes: Publishing Comprehensive Books Which Make the Case for Effective Corporate Animal Welfare Campaigns via a Writing Contest for Potential Authors",
"author": "Enginar",
"link": "https://forum.effectivealtruism.org/posts/9sraY9qrwuiKXJjhG/cause-exploration-prizes-publishing-comprehensive-books"
},
{
"title": "Pollination in India",
"author": "Iska Knuuttila",
"link": "https://forum.effectivealtruism.org/posts/TsBRvGXr3rmJsruje/pollination-in-india"
},
{
"title": "Cause Exploration Prizes: Time-restricted eating (IF) for individual and community health in LMICs ",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/RuwCxvJ3xEwQfZevN/cause-exploration-prizes-time-restricted-eating-if-for"
},
{
"title": "Cause Exploration Prizes: Misinformation Gone Viral: Education As Pandemic Prevention",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/Whi5ADu79uJrTpqEt/cause-exploration-prizes-misinformation-gone-viral-education"
},
{
"title": "Cause: research to narrow the gap between in vitro and in vivo experiments",
"author": "calvinmccarter",
"link": "https://forum.effectivealtruism.org/posts/tiHoApRMZPrviBxEx/cause-research-to-narrow-the-gap-between-in-vitro-and-in"
},
{
"title": "[Cause Exploration Prizes] Unlocking Americas Potential, or, “Its The Senate, Stupid”",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/3dZuN4q4cpCmr3xBb/cause-exploration-prizes-unlocking-america-s-potential-or-it"
},
{
"title": "Cause exploration: Tobacco harm reduction",
"author": "kristof",
"link": "https://forum.effectivealtruism.org/posts/bQh82m2zr3enC9vK9/cause-exploration-tobacco-harm-reduction"
},
{
"title": "Free-Ranging Dog Welfare in India as a Cause Area",
"author": "Akash Kulgod",
"link": "https://forum.effectivealtruism.org/posts/jXFA5ffcoYomSDv9A/free-ranging-dog-welfare-in-india-as-a-cause-area"
},
{
"title": "Investing for a cause",
"author": "brb243",
"link": "https://forum.effectivealtruism.org/posts/nafdbGWLj5epjvJEm/investing-for-a-cause"
},
{
"title": "New Cause Area: Steering and Stabilising Status Games",
"author": "Wim",
"link": "https://forum.effectivealtruism.org/posts/gpm668mLyhARPYzji/new-cause-area-steering-and-stabilising-status-games"
},
{
"title": "Cause X: Public Stretch Prizes",
"author": "philipkd",
"link": "https://forum.effectivealtruism.org/posts/DkMbqjNNc4hKYShtf/cause-x-public-stretch-prizes-1"
},
{
"title": "Cause Exploration: Managing Societal Transitions",
"author": "alexherwix",
"link": "https://forum.effectivealtruism.org/posts/hzrAXzoPDoEqueXW7/cause-exploration-managing-societal-transitions"
},
{
"title": "Cosmic rays could cause major electronic disruption and pose a small existential risk",
"author": "M_Allcock",
"link": "https://forum.effectivealtruism.org/posts/9gjc4ok4GfwuyRASL/cosmic-rays-could-cause-major-electronic-disruption-and-pose"
},
{
"title": "Cause Exploration Prize: Modernizing the Social Science Research Infrastructure",
"author": "yfu",
"link": "https://forum.effectivealtruism.org/posts/zTD8rhCFfa6qLCjGY/cause-exploration-prize-modernizing-the-social-science"
},
{
"title": "Open Philanthropy Should Fund Further Cause Exploration",
"author": "brb243",
"link": "https://forum.effectivealtruism.org/posts/tvMjgDWptF5MNJtAo/open-philanthropy-should-fund-further-cause-exploration"
},
{
"title": "Promoting climate considerations within existing high priority areas of work",
"author": "helmetedhornbill",
"link": "https://forum.effectivealtruism.org/posts/pmfyGEa4NozDm2fng/promoting-climate-considerations-within-existing-high"
},
{
"title": "Cause Exploration Prize: Unfettered Global Internet Access & Device Ownership ",
"author": "samhbarton",
"link": "https://forum.effectivealtruism.org/posts/DC9AZSn4dpFptA8mS/cause-exploration-prize-unfettered-global-internet-access"
},
{
"title": "Reciprocity & the causes of diminishing returns: cause exploration submission",
"author": "LB",
"link": "https://forum.effectivealtruism.org/posts/x9towRLtvYidkXugk/reciprocity-and-the-causes-of-diminishing-returns-cause"
},
{
"title": "Potential Risks of Advanced Gene Editing Technologies",
"author": "Courtney Colston",
"link": "https://forum.effectivealtruism.org/posts/EEgT2jHZSExBAPsTD/potential-risks-of-advanced-gene-editing-technologies"
},
{
"title": "The Economic Benefits of Promoting and Protecting the Rights of LGBTQ+ Communities in Developing Countries (cause exploration)",
"author": "Susannah Hares",
"link": "https://forum.effectivealtruism.org/posts/Xc7AH2Recks3RHteE/the-economic-benefits-of-promoting-and-protecting-the-rights"
}
]

View File

@ -0,0 +1,157 @@
[
{
"title": "New cause area: Violence against women and girls",
"author": "Akhil",
"link": "https://forum.effectivealtruism.org/posts/majcwf7i8pW8eMJ3v/new-cause-area-violence-against-women-and-girls"
},
{
"title": "Open Philanthropy's Cause Exploration Prizes: $120k for written work on global health and wellbeing",
"author": "ChrisSmith",
"link": "https://forum.effectivealtruism.org/posts/iqcph4DbcP4PZGyDB/open-philanthropy-s-cause-exploration-prizes-usd120k-for"
},
{
"title": "New cause area: training health workers to prevent newborn deaths",
"author": "Marshall",
"link": "https://forum.effectivealtruism.org/posts/B7wohgDDdwPoQAatt/new-cause-area-training-health-workers-to-prevent-newborn"
},
{
"title": "The Case for Making Professional Degrees Undergraduate Degrees",
"author": "ColdButtonIssues",
"link": "https://forum.effectivealtruism.org/posts/fEMpAcNycbXpp6Ext/the-case-for-making-professional-degrees-undergraduate"
},
{
"title": "Global Health &amp; Development - Beyond the Streetlight",
"author": "Richard Sedlmayr",
"link": "https://forum.effectivealtruism.org/posts/DXKWHAkihdb6nkKyG/global-health-and-development-beyond-the-streetlight-1"
},
{
"title": "Cause Exploration Prizes submission: bivalve aquaculture",
"author": "Brian Lui",
"link": "https://forum.effectivealtruism.org/posts/7keuWWMoYY6dMnqys/cause-exploration-prizes-submission-bivalve-aquaculture"
},
{
"title": "Potential new cause area: Obesity",
"author": "Akhil",
"link": "https://forum.effectivealtruism.org/posts/jhsXxPnKbwzLwrKFq/potential-new-cause-area-obesity"
},
{
"title": "Energy Access in Sub-Saharan Africa: Open Philanthropy Cause Exploration Prize Submission",
"author": "Tomer_Goloboy",
"link": "https://forum.effectivealtruism.org/posts/ZPjMemurtzeumwcdw/energy-access-in-sub-saharan-africa-open-philanthropy-cause"
},
{
"title": "Sleep: Open Philanthropy Cause Exploration Prize",
"author": "SuhanKacholia",
"link": "https://forum.effectivealtruism.org/posts/qnDBN3nAXgwyTnrAC/sleep-open-philanthropy-cause-exploration-prize"
},
{
"title": "Cause Exploration Prizes: Could New Technology Help Solve the Glasses Problem?",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/a3vbQCgxTeYNvQBfc/cause-exploration-prizes-could-new-technology-help-solve-the"
},
{
"title": "Cause Exploration Prizes: Expanding access to infertility services in Low- and Middle-Income Countries (LMICs)",
"author": "Soleine Scotney",
"link": "https://forum.effectivealtruism.org/posts/WAnJw5bhuQwhJiLTm/cause-exploration-prizes-expanding-access-to-infertility"
},
{
"title": "New Cause Area: Demographic Collapse",
"author": "Malcolm Collins",
"link": "https://forum.effectivealtruism.org/posts/vFfoqL74kmZbydKjp/new-cause-area-demographic-collapse"
},
{
"title": "Cause area: climate adaptation in low-income countries",
"author": "karthik-t",
"link": "https://forum.effectivealtruism.org/posts/nE827LwrRk5ep3Xao/cause-area-climate-adaptation-in-low-income-countries"
},
{
"title": "Open Climate Data as a possible cause area, Open Philanthropy",
"author": "Ben Yeoh",
"link": "https://forum.effectivealtruism.org/posts/s9HPpvMHgS5QYEM4C/open-climate-data-as-a-possible-cause-area-open-philanthropy"
},
{
"title": "One Million Missing Children",
"author": "ColdButtonIssues",
"link": "https://forum.effectivealtruism.org/posts/H5LDwwmdBYBDNXTq4/one-million-missing-children"
},
{
"title": "Cause Exploration Prizes: Reducing Suffering and Long Term Risk in Common Law Nations via Strategic Case Law Funding",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/C6urjnDeKjHGwf2M3/cause-exploration-prizes-reducing-suffering-and-long-term"
},
{
"title": "NEW GLOBAL POOLS: IMPACT FUNDS ",
"author": "TPogge",
"link": "https://forum.effectivealtruism.org/posts/J8fwT9cZd6x5eED3e/new-global-pools-impact-funds"
},
{
"title": "Saving lives near the precipice: we're doing it wrong?",
"author": "Samin",
"link": "https://forum.effectivealtruism.org/posts/hz2Q8GgZ28YKLazGb/saving-lives-near-the-precipice-we-re-doing-it-wrong"
},
{
"title": "A platform for on-demand vaccination",
"author": "George3d6",
"link": "https://forum.effectivealtruism.org/posts/rS2zWRDxw5vZwdQAC/a-platform-for-on-demand-vaccination"
},
{
"title": "Cause Exploration Prizes: Time-restricted eating (IF) for individual and community health in LMICs ",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/RuwCxvJ3xEwQfZevN/cause-exploration-prizes-time-restricted-eating-if-for"
},
{
"title": "Cause Exploration Prizes: Misinformation Gone Viral: Education As Pandemic Prevention",
"author": "Open Philanthropy",
"link": "https://forum.effectivealtruism.org/posts/Whi5ADu79uJrTpqEt/cause-exploration-prizes-misinformation-gone-viral-education"
},
{
"title": "Cause Exploration Prizes: Publishing Comprehensive Books Which Make the Case for Effective Corporate Animal Welfare Campaigns via a Writing Contest for Potential Authors",
"author": "Engin Arıkan",
"link": "https://forum.effectivealtruism.org/posts/9sraY9qrwuiKXJjhG/cause-exploration-prizes-publishing-comprehensive-books"
},
{
"title": "Maritime capability and post-catastrophe resilience.",
"author": "Tom Gardiner",
"link": "https://forum.effectivealtruism.org/posts/nKDBhWFj3vwwFKwGC/maritime-capability-and-post-catastrophe-resilience-1"
},
{
"title": "Shareholder activism",
"author": "sbehmer",
"link": "https://forum.effectivealtruism.org/posts/fqf4vgCWebTszvHm9/shareholder-activism"
},
{
"title": "Water, sanitation and hygiene (“WASH”) interventions as a cause area",
"author": "helmetedhornbill",
"link": "https://forum.effectivealtruism.org/posts/WAbjLFkpSoA7FDvTD/water-sanitation-and-hygiene-wash-interventions-as-a-cause"
},
{
"title": "Doing good is a privilege. This needs to change if we want to do good long-term. ",
"author": "SofiaBalderson",
"link": "https://forum.effectivealtruism.org/posts/gicYG5ymk4pPzrKAd/doing-good-is-a-privilege-this-needs-to-change-if-we-want-to"
},
{
"title": "Deadline extension (to August 11) for Open Philanthropy's Cause Exploration Prizes",
"author": "ChrisSmith",
"link": "https://forum.effectivealtruism.org/posts/WdMbmLfb7DMMYHvKf/deadline-extension-to-august-11-for-open-philanthropy-s"
},
{
"title": "Cause: Reducing Judicial Delay in India",
"author": "Vastav Ratra",
"link": "https://forum.effectivealtruism.org/posts/JcYyLfbnbhANCJdbv/cause-reducing-judicial-delay-in-india"
},
{
"title": "Open Philanthropy Should Fund Further Cause Exploration",
"author": "brb243",
"link": "https://forum.effectivealtruism.org/posts/tvMjgDWptF5MNJtAo/open-philanthropy-should-fund-further-cause-exploration"
},
{
"title": "Why Genetic Rescue",
"author": "David Lang",
"link": "https://forum.effectivealtruism.org/posts/ebBPcDxtSckRAoJfo/why-genetic-rescue"
},
{
"title": "Promoting climate considerations within existing high priority areas of work",
"author": "helmetedhornbill",
"link": "https://forum.effectivealtruism.org/posts/pmfyGEa4NozDm2fng/promoting-climate-considerations-within-existing-high"
}
]

View File

@ -217,15 +217,6 @@ export function ContractPageContent(
/>
)}
{(outcomeType === 'FREE_RESPONSE' ||
outcomeType === 'MULTIPLE_CHOICE') && (
<>
<Spacer h={4} />
<AnswersPanel contract={contract} />
<Spacer h={4} />
</>
)}
{isNumeric && allowTrade && (
<NumericBetPanel className="xl:hidden" contract={contract} />
)}

View File

@ -0,0 +1,386 @@
import { debounce, sortBy, take } from 'lodash'
import PlusSmIcon from '@heroicons/react/solid/PlusSmIcon'
import { Group, GROUP_CHAT_SLUG } from 'common/group'
import { Page } from 'web/components/page'
import { listAllBets } from 'web/lib/firebase/bets'
import { Contract, listContractsByGroupSlug } from 'web/lib/firebase/contracts'
import {
addContractToGroup,
getGroupBySlug,
groupPath,
joinGroup,
updateGroup,
} from 'web/lib/firebase/groups'
import { Row } from 'web/components/layout/row'
import { UserLink } from 'web/components/user-page'
import { firebaseLogin, getUser, User } from 'web/lib/firebase/users'
import { Col } from 'web/components/layout/col'
import { useUser } from 'web/hooks/use-user'
import { listMembers, useGroup, useMembers } from 'web/hooks/use-group'
import { useRouter } from 'next/router'
import { scoreCreators, scoreTraders } from 'common/scoring'
import { Leaderboard } from 'web/components/leaderboard'
import { formatMoney } from 'common/util/format'
import { EditGroupButton } from 'web/components/groups/edit-group-button'
import Custom404 from '../../404'
import { SEO } from 'web/components/SEO'
import { Linkify } from 'web/components/linkify'
import { fromPropz, usePropz } from 'web/hooks/use-propz'
import { Tabs } from 'web/components/layout/tabs'
import { CreateQuestionButton } from 'web/components/create-question-button'
import React, { useState } from 'react'
import { GroupChat } from 'web/components/groups/group-chat'
import { LoadingIndicator } from 'web/components/loading-indicator'
import { Modal } from 'web/components/layout/modal'
import { getSavedSort } from 'web/hooks/use-sort-and-query-params'
import { ChoicesToggleGroup } from 'web/components/choices-toggle-group'
import { toast } from 'react-hot-toast'
import { useCommentsOnGroup } from 'web/hooks/use-comments'
import { REFERRAL_AMOUNT } from 'common/user'
import { ContractSearch } from 'web/components/contract-search'
import clsx from 'clsx'
import { FollowList } from 'web/components/follow-list'
import { SearchIcon } from '@heroicons/react/outline'
import { useTipTxns } from 'web/hooks/use-tip-txns'
import { JoinOrLeaveGroupButton } from 'web/components/groups/groups-button'
import { searchInAny } from 'common/util/parse'
import { useWindowSize } from 'web/hooks/use-window-size'
import { CopyLinkButton } from 'web/components/copy-link-button'
import { ENV_CONFIG } from 'common/envs/constants'
import { useSaveReferral } from 'web/hooks/use-save-referral'
import { Button } from 'web/components/button'
import { SubmissionSearch } from 'web/components/submission-search'
import { ContestChat } from 'web/components/contests/contest-chat'
import { contestPath } from 'web/lib/firebase/contests'
export const getStaticProps = fromPropz(getStaticPropz)
export async function getStaticPropz(props: { params: { slugs: string[] } }) {
const { slugs } = props.params
const contest = await getGroupBySlug(slugs[0])
const members = contest && (await listMembers(contest))
const creatorPromise = contest ? getUser(contest.creatorId) : null
const contracts =
(contest && (await listContractsByGroupSlug(contest.slug))) ?? []
const bets = await Promise.all(
contracts.map((contract: Contract) => listAllBets(contract.id))
)
const creatorScores = scoreCreators(contracts)
const traderScores = scoreTraders(contracts, bets)
const [topCreators, topTraders] =
(members && [
toTopUsers(creatorScores, members),
toTopUsers(traderScores, members),
]) ??
[]
const creator = await creatorPromise
return {
props: {
contest,
members,
creator,
traderScores,
topTraders,
creatorScores,
topCreators,
},
revalidate: 60, // regenerate after a minute
}
}
function toTopUsers(userScores: { [userId: string]: number }, users: User[]) {
const topUserPairs = take(
sortBy(Object.entries(userScores), ([_, score]) => -1 * score),
10
).filter(([_, score]) => score >= 0.5)
const topUsers = topUserPairs.map(
([userId]) => users.filter((user) => user.id === userId)[0]
)
return topUsers.filter((user) => user)
}
export async function getStaticPaths() {
return { paths: [], fallback: 'blocking' }
}
const contestSubpages = [
undefined,
GROUP_CHAT_SLUG,
'submissions',
'leaderboards',
'about',
] as const
export default function ContestPage(props: {
contest: Group | null
members: User[]
creator: User
traderScores: { [userId: string]: number }
topTraders: User[]
creatorScores: { [userId: string]: number }
topCreators: User[]
}) {
props = usePropz(props, getStaticPropz) ?? {
contest: null,
members: [],
creator: null,
traderScores: {},
topTraders: [],
creatorScores: {},
topCreators: [],
}
const {
creator,
members,
traderScores,
topTraders,
creatorScores,
topCreators,
} = props
const router = useRouter()
const { slugs } = router.query as { slugs: string[] }
const page = slugs?.[1] as typeof contestSubpages[number]
const contest = useGroup(props.contest?.id) ?? props.contest
const tips = useTipTxns({ groupId: contest?.id })
const messages = useCommentsOnGroup(contest?.id)
const user = useUser()
useSaveReferral(user, {
defaultReferrer: creator.username,
groupId: contest?.id,
})
const { width } = useWindowSize()
const chatDisabled = !contest || contest.chatDisabled
const showChatSidebar = !chatDisabled && (width ?? 1280) >= 1280
const showChatTab = !chatDisabled && !showChatSidebar
if (contest === null || !contestSubpages.includes(page) || slugs[2]) {
return <Custom404 />
}
const { memberIds } = contest
const isCreator = user && contest && user.id === contest.creatorId
const isMember = user && memberIds.includes(user.id)
const leaderboard = (
<Col>
<ContestLeaderboards
traderScores={traderScores}
creatorScores={creatorScores}
topTraders={topTraders}
topCreators={topCreators}
members={members}
user={user}
/>
</Col>
)
const aboutTab = (
<Col>
<ContestOverview contest={contest} />
</Col>
)
const chatTab = (
<Col className="">
{messages ? (
<ContestChat
messages={messages}
user={user}
contest={contest}
tips={tips}
/>
) : (
<LoadingIndicator />
)}
</Col>
)
const submissionsTab = (
<SubmissionSearch
querySortOptions={{
shouldLoadFromStorage: true,
defaultSort: getSavedSort() ?? 'newest',
defaultFilter: 'open',
}}
additionalFilter={{ contestSlug: contest.slug }}
/>
)
const tabs = [
...(!showChatTab
? []
: [
{
title: 'Chat',
content: chatTab,
href: contestPath(contest.slug, GROUP_CHAT_SLUG),
},
]),
{
title: 'Submissions',
content: submissionsTab,
href: contestPath(contest.slug, 'submissions'),
},
{
title: 'Leaderboards',
content: leaderboard,
href: contestPath(contest.slug, 'leaderboards'),
},
{
title: 'About',
content: aboutTab,
href: contestPath(contest.slug, 'about'),
},
]
const tabIndex = tabs.map((t) => t.title).indexOf(page ?? GROUP_CHAT_SLUG)
return (
<Page
rightSidebar={showChatSidebar ? chatTab : undefined}
rightSidebarClassName={showChatSidebar ? '!top-0' : ''}
className={showChatSidebar ? '!max-w-7xl !pb-0' : ''}
>
<SEO
title={contest.name}
description={`Created by ${creator.name}. ${contest.about}`}
url={contestPath(contest.slug)}
/>
<Col className="px-3">
<Row className={'items-center justify-between gap-4'}>
<div className={'sm:mb-1'}>
<div
className={'line-clamp-1 my-2 text-2xl text-indigo-700 sm:my-3'}
>
{contest.name}
</div>
<div className={'hidden sm:block'}>
<Linkify text={contest.about} />
</div>
</div>
</Row>
</Col>
<Tabs
currentPageForAnalytics={contestPath(contest.slug)}
className={'mb-0 sm:mb-2'}
defaultIndex={tabIndex > 0 ? tabIndex : 0}
tabs={tabs}
/>
</Page>
)
}
function ContestOverview(props: { contest: Group }) {
const { contest } = props
return (
<>
<Col className="gap-2 rounded-b bg-white p-2">
<div className={'block sm:hidden'}>
<Linkify text={contest.about} />
</div>
</Col>
</>
)
}
function SortedLeaderboard(props: {
users: User[]
scoreFunction: (user: User) => number
title: string
header: string
maxToShow?: number
}) {
const { users, scoreFunction, title, header, maxToShow } = props
const sortedUsers = users.sort((a, b) => scoreFunction(b) - scoreFunction(a))
return (
<Leaderboard
className="max-w-xl"
users={sortedUsers}
title={title}
columns={[
{ header, renderCell: (user) => formatMoney(scoreFunction(user)) },
]}
maxToShow={maxToShow}
/>
)
}
function ContestLeaderboards(props: {
traderScores: { [userId: string]: number }
creatorScores: { [userId: string]: number }
topTraders: User[]
topCreators: User[]
members: User[]
user: User | null | undefined
}) {
const { traderScores, creatorScores, members, topTraders, topCreators } =
props
const maxToShow = 50
// Consider hiding M$0
// If it's just one member (curator), show all bettors, otherwise just show members
return (
<Col>
<div className="mt-4 flex flex-col gap-8 px-4 md:flex-row">
{members.length > 1 ? (
<>
<SortedLeaderboard
users={members}
scoreFunction={(user) => traderScores[user.id] ?? 0}
title="🏅 Top traders"
header="Profit"
maxToShow={maxToShow}
/>
<SortedLeaderboard
users={members}
scoreFunction={(user) => creatorScores[user.id] ?? 0}
title="🏅 Top creators"
header="Market volume"
maxToShow={maxToShow}
/>
</>
) : (
<>
<Leaderboard
className="max-w-xl"
title="🏅 Top traders"
users={topTraders}
columns={[
{
header: 'Profit',
renderCell: (user) => formatMoney(traderScores[user.id] ?? 0),
},
]}
maxToShow={maxToShow}
/>
<Leaderboard
className="max-w-xl"
title="🏅 Top creators"
users={topCreators}
columns={[
{
header: 'Market volume',
renderCell: (user) =>
formatMoney(creatorScores[user.id] ?? 0),
},
]}
maxToShow={maxToShow}
/>
</>
)}
</div>
</Col>
)
}

View File

@ -0,0 +1,293 @@
import React, { useEffect, useState } from 'react'
import { ArrowLeftIcon } from '@heroicons/react/outline'
import { useContractWithPreload } from 'web/hooks/use-contract'
import { ContractOverview } from 'web/components/contract/contract-overview'
import { BetPanel } from 'web/components/bet-panel'
import { Col } from 'web/components/layout/col'
import { useUser } from 'web/hooks/use-user'
import { ResolutionPanel } from 'web/components/resolution-panel'
import { Spacer } from 'web/components/layout/spacer'
import {
Contract,
getContractFromSlug,
tradingAllowed,
getBinaryProbPercent,
getContractFromId,
} from 'web/lib/firebase/contracts'
import { SEO } from 'web/components/SEO'
import { Page } from 'web/components/page'
import { Bet, listAllBets } from 'web/lib/firebase/bets'
import { Comment, listAllComments } from 'web/lib/firebase/comments'
import Custom404 from '../../404'
import { AnswersPanel } from 'web/components/answers/answers-panel'
import { fromPropz, usePropz } from 'web/hooks/use-propz'
import { ContractTabs } from 'web/components/contract/contract-tabs'
import { contractTextDetails } from 'web/components/contract/contract-details'
import { useWindowSize } from 'web/hooks/use-window-size'
import Confetti from 'react-confetti'
import { NumericBetPanel } from '../../../components/numeric-bet-panel'
import { NumericResolutionPanel } from '../../../components/numeric-resolution-panel'
import { useIsIframe } from 'web/hooks/use-is-iframe'
import ContractEmbedPage from '../../embed/[username]/[contractSlug]'
import { useBets } from 'web/hooks/use-bets'
import { CPMMBinaryContract } from 'common/contract'
import { AlertBox } from 'web/components/alert-box'
import { useTracking } from 'web/hooks/use-tracking'
import { useTipTxns } from 'web/hooks/use-tip-txns'
import { useLiquidity } from 'web/hooks/use-liquidity'
import { richTextToString } from 'common/util/parse'
import { useSaveReferral } from 'web/hooks/use-save-referral'
import {
ContractLeaderboard,
ContractTopTrades,
} from 'web/components/contract/contract-leaderboard'
export const getStaticProps = fromPropz(getStaticPropz)
export async function getStaticPropz(props: {
params: { contestSlug: string; submissionSlug: string }
}) {
const { contestSlug, submissionSlug } = props.params
console.log(contestSlug)
const submission = (await getContractFromSlug(submissionSlug)) || null
const submissionId = submission?.id
const [bets, comments] = await Promise.all([
submissionId ? listAllBets(submissionId) : [],
submissionId ? listAllComments(submissionId) : [],
])
return {
props: {
submission,
contestSlug,
// Limit the data sent to the client. Client will still load all bets and comments directly.
bets: bets.slice(0, 5000),
comments: comments.slice(0, 1000),
slug: submissionSlug,
},
revalidate: 60, // regenerate after a minute
}
}
export async function getStaticPaths() {
return { paths: [], fallback: 'blocking' }
}
export default function ContractPage(props: {
submission: Contract | null
contestSlug: string
bets: Bet[]
comments: Comment[]
slug: string
backToHome?: () => void
}) {
props = usePropz(props, getStaticPropz) ?? {
submission: null,
contestSlug: '',
bets: [],
comments: [],
slug: '',
}
// const inIframe = useIsIframe()
// if (inIframe) {
// return <ContractEmbedPage {...props} />
// }
const { submission } = props
if (!submission) {
return <Custom404 />
}
return <SubmissionPageContent {...{ ...props, submission }} />
}
export function SubmissionPageContent(
props: Parameters<typeof ContractPage>[0] & { submission: Contract }
) {
const { backToHome, comments } = props
const contract = useContractWithPreload(props.submission) ?? props.submission
useTracking('view market', {
slug: contract.slug,
contractId: contract.id,
creatorId: contract.creatorId,
})
const bets = useBets(contract.id) ?? props.bets
const liquidityProvisions =
useLiquidity(contract.id)?.filter((l) => !l.isAnte && l.amount > 0) ?? []
// Sort for now to see if bug is fixed.
comments.sort((c1, c2) => c1.createdTime - c2.createdTime)
const tips = useTipTxns({ contractId: contract.id })
const user = useUser()
const { width, height } = useWindowSize()
const [showConfetti, setShowConfetti] = useState(false)
useEffect(() => {
const shouldSeeConfetti = !!(
user &&
contract.creatorId === user.id &&
Date.now() - contract.createdTime < 10 * 1000
)
setShowConfetti(shouldSeeConfetti)
}, [contract, user])
const { creatorId, isResolved, question, outcomeType } = contract
const isCreator = user?.id === creatorId
const isBinary = outcomeType === 'BINARY'
const isPseudoNumeric = outcomeType === 'PSEUDO_NUMERIC'
const isNumeric = outcomeType === 'NUMERIC'
const allowTrade = tradingAllowed(contract)
const allowResolve = !isResolved && isCreator && !!user
const hasSidePanel =
(isBinary || isNumeric || isPseudoNumeric) && (allowTrade || allowResolve)
const ogCardProps = getOpenGraphProps(contract)
useSaveReferral(user, {
defaultReferrer: contract.creatorUsername,
contractId: contract.id,
})
const rightSidebar = hasSidePanel ? (
<Col className="gap-4">
{allowTrade &&
(isNumeric ? (
<NumericBetPanel className="hidden xl:flex" contract={contract} />
) : (
<BetPanel
className="hidden xl:flex"
contract={contract as CPMMBinaryContract}
/>
))}
{allowResolve &&
(isNumeric || isPseudoNumeric ? (
<NumericResolutionPanel creator={user} contract={contract} />
) : (
<ResolutionPanel creator={user} contract={contract} />
))}
</Col>
) : null
return (
<Page rightSidebar={rightSidebar}>
{showConfetti && (
<Confetti
width={width ? width : 500}
height={height ? height : 500}
recycle={false}
numberOfPieces={300}
/>
)}
{ogCardProps && (
<SEO
title={question}
description={ogCardProps.description}
url={`/${props.contestSlug}/${props.slug}`}
ogCardProps={ogCardProps}
/>
)}
<Col className="w-full justify-between rounded border-0 border-gray-100 bg-white py-6 pl-1 pr-2 sm:px-2 md:px-6 md:py-8">
{backToHome && (
<button
className="btn btn-sm mb-4 items-center gap-2 self-start border-0 border-gray-700 bg-white normal-case text-gray-700 hover:bg-white hover:text-gray-700 lg:hidden"
onClick={backToHome}
>
<ArrowLeftIcon className="h-5 w-5 text-gray-700" />
Back
</button>
)}
<ContractOverview contract={contract} bets={bets} />
{isNumeric && (
<AlertBox
title="Warning"
text="Distributional numeric markets were introduced as an experimental feature and are now deprecated."
/>
)}
{/*
{(outcomeType === 'FREE_RESPONSE' ||
outcomeType === 'MULTIPLE_CHOICE') && (
<>
<Spacer h={4} />
<AnswersPanel contract={contract} />
<Spacer h={4} />
</>
)} */}
{isNumeric && allowTrade && (
<NumericBetPanel className="xl:hidden" contract={contract} />
)}
{isResolved && (
<>
<div className="grid grid-cols-1 sm:grid-cols-2">
<ContractLeaderboard contract={contract} bets={bets} />
<ContractTopTrades
contract={contract}
bets={bets}
comments={comments}
tips={tips}
/>
</div>
<Spacer h={12} />
</>
)}
<ContractTabs
contract={contract}
user={user}
liquidityProvisions={liquidityProvisions}
bets={bets}
tips={tips}
comments={comments}
/>
</Col>
</Page>
)
}
const getOpenGraphProps = (contract: Contract) => {
const {
resolution,
question,
creatorName,
creatorUsername,
outcomeType,
creatorAvatarUrl,
description: desc,
} = contract
const probPercent =
outcomeType === 'BINARY' ? getBinaryProbPercent(contract) : undefined
const stringDesc = typeof desc === 'string' ? desc : richTextToString(desc)
const description = resolution
? `Resolved ${resolution}. ${stringDesc}`
: probPercent
? `${probPercent} chance. ${stringDesc}`
: stringDesc
return {
question,
probability: probPercent,
metadata: contractTextDetails(contract),
creatorName,
creatorUsername,
creatorAvatarUrl,
description,
}
}

151
web/pages/contests.tsx Normal file
View File

@ -0,0 +1,151 @@
import { debounce, sortBy } from 'lodash'
import Link from 'next/link'
import React, { useEffect, useState } from 'react'
import { Group } from 'common/group'
import { CreateGroupButton } from 'web/components/groups/create-group-button'
import { Col } from 'web/components/layout/col'
import { Row } from 'web/components/layout/row'
import { Page } from 'web/components/page'
import { Title } from 'web/components/title'
import { useGroups, useMemberGroupIds, useMembers } from 'web/hooks/use-group'
import { useUser } from 'web/hooks/use-user'
import { groupPath, listAllGroups } from 'web/lib/firebase/groups'
import { getUser, User } from 'web/lib/firebase/users'
import { Tabs } from 'web/components/layout/tabs'
import { SiteLink } from 'web/components/site-link'
import clsx from 'clsx'
import { Avatar } from 'web/components/avatar'
import { JoinOrLeaveGroupButton } from 'web/components/groups/groups-button'
import { UserLink } from 'web/components/user-page'
import { searchInAny } from 'common/util/parse'
import { SEO } from 'web/components/SEO'
import { CONTEST_SLUGS, contest_data } from 'common/contest'
import { contestPath } from 'web/lib/firebase/contests'
export async function getStaticProps() {
const groups = await listAllGroups().catch((_) => [])
const creators = await Promise.all(
groups.map((group) => getUser(group.creatorId))
)
const creatorsDict = Object.fromEntries(
creators.map((creator) => [creator.id, creator])
)
return {
props: {
groups: groups,
creatorsDict,
},
revalidate: 60, // regenerate after a minute
}
}
export default function Contests(props: {
groups: Group[]
creatorsDict: { [k: string]: User }
}) {
const [creatorsDict, setCreatorsDict] = useState(props.creatorsDict)
const contests = (useGroups() ?? props.groups).filter((group) =>
CONTEST_SLUGS.includes(group.slug)
)
const user = useUser()
// useEffect(() => {
// // Load User object for creator of new Groups.
// const newGroups = contests.filter(
// ({ creatorId }) => !creatorsDict[creatorId]
// )
// if (newGroups.length > 0) {
// Promise.all(newGroups.map(({ creatorId }) => getUser(creatorId))).then(
// (newUsers) => {
// const newUsersDict = Object.fromEntries(
// newUsers.map((user) => [user.id, user])
// )
// setCreatorsDict({ ...creatorsDict, ...newUsersDict })
// }
// )
// }
// }, [creatorsDict, contests])
const [query, setQuery] = useState('')
// List groups with the highest question count, then highest member count
// TODO use find-active-contracts to sort by?
const matches = sortBy(contests, [
(contest) => -1 * contest.contractIds.length,
(contest) => -1 * contest.memberIds.length,
]).filter((g) =>
searchInAny(
query,
g.name,
g.about || '',
creatorsDict[g.creatorId].username
)
)
// Not strictly necessary, but makes the "hold delete" experience less laggy
const debouncedQuery = debounce(setQuery, 50)
return (
<Page>
<SEO
title="Contests"
description="Discuss real world contests. Vote on your favorite submissions, get rewarded in mana if you're right."
url="/contests"
/>
<Col className="items-center">
<Col className="w-full max-w-2xl px-4 sm:px-2">
<Col className="mt-12 items-center">
<img className="object-fit w-32" src="contests/ManiTrophy.png" />
<Title text="Contests" />
</Col>
<div className="mb-6 text-gray-500">
Discuss real world contests. Vote on your favorite submissions, get
rewarded in mana if you're right.
</div>
<Col>
<input
type="text"
onChange={(e) => debouncedQuery(e.target.value)}
placeholder="Search contests"
className="input input-bordered mb-4 w-full"
/>
<div className="flex flex-wrap justify-center gap-4">
{matches.map((contest) => (
<ContestCard key={contest.id} contest={contest} />
))}
</div>
</Col>
</Col>
</Col>
</Page>
)
}
export function ContestCard(props: { contest: Group }) {
const { contest } = props
const slug = contest.slug
return (
<Col className="relative min-w-[20rem] max-w-xs gap-1 rounded-xl bg-white p-8 shadow-md hover:shadow-xl">
<Link href={contestPath(contest.slug)}>
<a className="absolute left-0 right-0 top-0 bottom-0 z-0" />
</Link>
<img
className="mb-2 h-24 w-24 self-center"
src={`contests/${contest.slug}.png`}
/>
<Row className="items-center justify-between gap-2">
<span className="text-xl text-indigo-700">{contest.name}</span>
</Row>
<Row>
<div className="text-sm text-gray-500">{contest.about}</div>
</Row>
</Col>
)
}

View File

@ -0,0 +1,123 @@
import { Answer } from 'common/answer'
import { searchInAny } from 'common/util/parse'
import { sortBy } from 'lodash'
import { useState } from 'react'
import { ContractsGrid } from 'web/components/contract/contracts-list'
import { LoadingIndicator } from 'web/components/loading-indicator'
import { useContracts } from 'web/hooks/use-contracts'
import {
Sort,
useInitialQueryAndSort,
} from 'web/hooks/use-sort-and-query-params'
const MAX_CONTRACTS_RENDERED = 100
export default function ContractSearchFirestore(props: {
querySortOptions?: {
defaultSort: Sort
shouldLoadFromStorage?: boolean
}
additionalFilter?: {
creatorId?: string
tag?: string
}
}) {
const contracts = useContracts()
const { querySortOptions, additionalFilter } = props
const { initialSort, initialQuery } = useInitialQueryAndSort(querySortOptions)
const [sort, setSort] = useState(initialSort || 'newest')
const [query, setQuery] = useState(initialQuery)
let matches = (contracts ?? []).filter((c) =>
searchInAny(
query,
c.question,
c.creatorName,
c.lowercaseTags.map((tag) => `#${tag}`).join(' '),
((c as any).answers ?? []).map((answer: Answer) => answer.text).join(' ')
)
)
if (sort === 'newest') {
matches.sort((a, b) => b.createdTime - a.createdTime)
} else if (sort === 'resolve-date') {
matches = sortBy(matches, (contract) => -1 * (contract.resolutionTime ?? 0))
} else if (sort === 'oldest') {
matches.sort((a, b) => a.createdTime - b.createdTime)
} else if (sort === 'close-date') {
matches = sortBy(matches, ({ volume24Hours }) => -1 * volume24Hours)
matches = sortBy(
matches,
(contract) =>
(sort === 'close-date' ? -1 : 1) * (contract.closeTime ?? Infinity)
)
} else if (sort === 'most-traded') {
matches.sort((a, b) => b.volume - a.volume)
} else if (sort === 'score') {
matches.sort((a, b) => (b.popularityScore ?? 0) - (a.popularityScore ?? 0))
} else if (sort === '24-hour-vol') {
// Use lodash for stable sort, so previous sort breaks all ties.
matches = sortBy(matches, ({ volume7Days }) => -1 * volume7Days)
matches = sortBy(matches, ({ volume24Hours }) => -1 * volume24Hours)
}
if (additionalFilter) {
const { creatorId, tag } = additionalFilter
if (creatorId) {
matches = matches.filter((c) => c.creatorId === creatorId)
}
if (tag) {
matches = matches.filter((c) =>
c.lowercaseTags.includes(tag.toLowerCase())
)
}
}
matches = matches.slice(0, MAX_CONTRACTS_RENDERED)
const showTime = ['close-date', 'closed'].includes(sort)
? 'close-date'
: sort === 'resolve-date'
? 'resolve-date'
: undefined
return (
<div>
{/* Show a search input next to a sort dropdown */}
<div className="mt-2 mb-8 flex justify-between gap-2">
<input
type="text"
value={query}
onChange={(e) => setQuery(e.target.value)}
placeholder="Search markets"
className="input input-bordered w-full"
/>
<select
className="select select-bordered"
value={sort}
onChange={(e) => setSort(e.target.value as Sort)}
>
<option value="newest">Newest</option>
<option value="oldest">Oldest</option>
<option value="score">Most popular</option>
<option value="most-traded">Most traded</option>
<option value="24-hour-vol">24h volume</option>
<option value="close-date">Closing soon</option>
</select>
</div>
{contracts === undefined ? (
<LoadingIndicator />
) : (
<ContractsGrid
contracts={matches}
loadMore={() => {}}
hasMore={false}
showTime={showTime}
/>
)}
</div>
)
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 218 KiB

194
yarn.lock
View File

@ -3156,6 +3156,13 @@
dependencies:
"@types/node" "*"
"@types/cheerio@^0.22.31":
version "0.22.31"
resolved "https://registry.yarnpkg.com/@types/cheerio/-/cheerio-0.22.31.tgz#b8538100653d6bb1b08a1e46dec75b4f2a5d5eb6"
integrity sha512-Kt7Cdjjdi2XWSfrZ53v4Of0wG3ZcmaegFXjMmz9tfNrZSkzzo36G0AL1YqSdcIA78Etjt6E609pt5h1xnQkPUw==
dependencies:
"@types/node" "*"
"@types/connect-history-api-fallback@^1.3.5":
version "1.3.5"
resolved "https://registry.yarnpkg.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.3.5.tgz#d1f7a8a09d0ed5a57aee5ae9c18ab9b803205dae"
@ -3450,6 +3457,13 @@
dependencies:
"@types/node" "*"
"@types/yauzl@^2.9.1":
version "2.10.0"
resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599"
integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==
dependencies:
"@types/node" "*"
"@typescript-eslint/eslint-plugin@5.25.0":
version "5.25.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.25.0.tgz#e8ce050990e4d36cc200f2de71ca0d3eb5e77a31"
@ -4145,7 +4159,7 @@ base16@^1.0.0:
resolved "https://registry.yarnpkg.com/base16/-/base16-1.0.0.tgz#e297f60d7ec1014a7a971a39ebc8a98c0b681e70"
integrity sha512-pNdYkNPiJUnEhnfXV56+sQy8+AaPcG3POZAUnwr4EeqCUZFz4u2PePbo3e5Gj4ziYPCWGUZT9RHisvJKnwFuBQ==
base64-js@^1.3.0:
base64-js@^1.3.0, base64-js@^1.3.1:
version "1.5.1"
resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
@ -4175,6 +4189,15 @@ binary-extensions@^2.0.0:
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d"
integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
bl@^4.0.3:
version "4.1.0"
resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
dependencies:
buffer "^5.5.0"
inherits "^2.0.4"
readable-stream "^3.4.0"
bluebird@^3.7.1:
version "3.7.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f"
@ -4288,6 +4311,11 @@ browserslist@^4.0.0, browserslist@^4.14.5, browserslist@^4.16.6, browserslist@^4
node-releases "^2.0.3"
picocolors "^1.0.0"
buffer-crc32@~0.2.3:
version "0.2.13"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
buffer-equal-constant-time@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
@ -4298,6 +4326,14 @@ buffer-from@^1.0.0:
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
buffer@^5.2.1, buffer@^5.5.0:
version "5.7.1"
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
dependencies:
base64-js "^1.3.1"
ieee754 "^1.1.13"
bytes@3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048"
@ -4421,6 +4457,19 @@ cheerio-select@^2.1.0:
domhandler "^5.0.3"
domutils "^3.0.1"
cheerio@1.0.0-rc.12:
version "1.0.0-rc.12"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683"
integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==
dependencies:
cheerio-select "^2.1.0"
dom-serializer "^2.0.0"
domhandler "^5.0.3"
domutils "^3.0.1"
htmlparser2 "^8.0.1"
parse5 "^7.0.0"
parse5-htmlparser2-tree-adapter "^7.0.0"
cheerio@^0.22.0:
version "0.22.0"
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-0.22.0.tgz#a9baa860a3f9b595a6b81b1a86873121ed3a269e"
@ -4472,6 +4521,11 @@ chokidar@^3.4.2, chokidar@^3.5.2, chokidar@^3.5.3:
optionalDependencies:
fsevents "~2.3.2"
chownr@^1.1.1:
version "1.1.4"
resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
chrome-trace-event@^1.0.2:
version "1.0.3"
resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz#1015eced4741e15d06664a957dbbf50d041e26ac"
@ -4843,7 +4897,7 @@ cross-env@^7.0.3:
dependencies:
cross-spawn "^7.0.1"
cross-fetch@^3.1.5:
cross-fetch@3.1.5, cross-fetch@^3.1.5:
version "3.1.5"
resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.5.tgz#e1389f44d9e7ba767907f7af8454787952ab534f"
integrity sha512-lvb1SBsI0Z7GDwmuid+mU3kWVBwTVUbe7S0H52yaaAdQOXq2YktTCZdlAcNKFzE6QtRz0snpw9bNiPeOIkkQvw==
@ -5158,7 +5212,7 @@ debug@3.1.0:
dependencies:
ms "2.0.0"
debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
debug@4, debug@4.3.4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.2, debug@^4.3.4:
version "4.3.4"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865"
integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
@ -5314,6 +5368,11 @@ detective@^5.2.1:
defined "^1.0.0"
minimist "^1.2.6"
devtools-protocol@0.0.1019158:
version "0.0.1019158"
resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1019158.tgz#4b08d06108a784a2134313149626ba55f030a86f"
integrity sha512-wvq+KscQ7/6spEV7czhnZc9RM/woz1AY+/Vpd8/h2HFMwJSdTliu7f/yr1A6vDdJfKICZsShqsYpEQbdhg8AFQ==
dicer@^0.3.0:
version "0.3.1"
resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.1.tgz#abf28921e3475bc5e801e74e0159fd94f927ba97"
@ -6033,6 +6092,17 @@ extend@^3.0.0, extend@^3.0.2, extend@~3.0.2:
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
extract-zip@2.0.1:
version "2.0.1"
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a"
integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==
dependencies:
debug "^4.1.1"
get-stream "^5.1.0"
yauzl "^2.10.0"
optionalDependencies:
"@types/yauzl" "^2.9.1"
fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3:
version "3.1.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
@ -6115,6 +6185,13 @@ fbjs@^3.0.0, fbjs@^3.0.1:
setimmediate "^1.0.5"
ua-parser-js "^0.7.30"
fd-slicer@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
dependencies:
pend "~1.2.0"
feed@^4.2.2:
version "4.2.2"
resolved "https://registry.yarnpkg.com/feed/-/feed-4.2.2.tgz#865783ef6ed12579e2c44bbef3c9113bc4956a7e"
@ -6365,6 +6442,11 @@ fresh@0.5.2:
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7"
integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
fs-constants@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
fs-extra@^10.0.1:
version "10.1.0"
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf"
@ -7078,6 +7160,14 @@ http-proxy@^1.18.1:
follow-redirects "^1.0.0"
requires-port "^1.0.0"
https-proxy-agent@5.0.1, https-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
dependencies:
agent-base "6"
debug "4"
https-proxy-agent@^3.0.0:
version "3.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-3.0.1.tgz#b8c286433e87602311b01c8ea34413d856a4af81"
@ -7086,14 +7176,6 @@ https-proxy-agent@^3.0.0:
agent-base "^4.3.0"
debug "^3.1.0"
https-proxy-agent@^5.0.0:
version "5.0.1"
resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6"
integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
dependencies:
agent-base "6"
debug "4"
human-signals@^2.1.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
@ -7116,6 +7198,11 @@ idb@3.0.2:
resolved "https://registry.yarnpkg.com/idb/-/idb-3.0.2.tgz#c8e9122d5ddd40f13b60ae665e4862f8b13fa384"
integrity sha512-+FLa/0sTXqyux0o6C+i2lOR0VoS60LU/jzUo5xjfY6+7sEEgy4Gz1O7yFBXvjd7N0NyIGWIRg8DcQSLEG+VSPw==
ieee754@^1.1.13:
version "1.2.1"
resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
ignore-by-default@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09"
@ -7189,7 +7276,7 @@ inflight@^1.0.4:
once "^1.3.0"
wrappy "1"
inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.1, inherits@~2.0.3:
version "2.0.4"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
@ -8339,6 +8426,11 @@ minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
mkdirp-classic@^0.5.2:
version "0.5.3"
resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
mkdirp@0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e"
@ -8989,6 +9081,11 @@ path-type@^4.0.0:
resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
pend@~1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
performance-now@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5"
@ -9430,6 +9527,11 @@ process-nextick-args@~2.0.0:
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
progress@2.0.3:
version "2.0.3"
resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8"
integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==
promise-polyfill@8.1.3:
version "8.1.3"
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.3.tgz#8c99b3cf53f3a91c68226ffde7bde81d7f904116"
@ -9625,7 +9727,7 @@ proxy-agent@^3.0.3:
proxy-from-env "^1.0.0"
socks-proxy-agent "^4.0.1"
proxy-from-env@^1.0.0:
proxy-from-env@1.1.0, proxy-from-env@^1.0.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2"
integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==
@ -9674,6 +9776,23 @@ pupa@^2.1.1:
dependencies:
escape-goat "^2.0.0"
puppeteer@17.0.0:
version "17.0.0"
resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-17.0.0.tgz#85fea801a7b8b8c9e2913b1491e98c867be49a6b"
integrity sha512-T2rdzlPxnPezF218kywFP3O+0YI5/8Kl8riNUicGb+KuMyDTrqRjhSOSDp6coQ1T4QYPBARTFp4EMBepMOzAQA==
dependencies:
cross-fetch "3.1.5"
debug "4.3.4"
devtools-protocol "0.0.1019158"
extract-zip "2.0.1"
https-proxy-agent "5.0.1"
progress "2.0.3"
proxy-from-env "1.1.0"
rimraf "3.0.2"
tar-fs "2.1.1"
unbzip2-stream "1.4.3"
ws "8.8.1"
pure-color@^1.2.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/pure-color/-/pure-color-1.3.0.tgz#1fe064fb0ac851f0de61320a8bf796836422f33e"
@ -10023,7 +10142,7 @@ readable-stream@2, readable-stream@^2.0.1, readable-stream@~2.3.6:
string_decoder "~1.1.1"
util-deprecate "~1.0.1"
readable-stream@^3.0.6, readable-stream@^3.1.1:
readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0:
version "3.6.0"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198"
integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
@ -11114,6 +11233,27 @@ tapable@^2.0.0, tapable@^2.1.1, tapable@^2.2.0:
resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0"
integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==
tar-fs@2.1.1:
version "2.1.1"
resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784"
integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
dependencies:
chownr "^1.1.1"
mkdirp-classic "^0.5.2"
pump "^3.0.0"
tar-stream "^2.1.4"
tar-stream@^2.1.4:
version "2.2.0"
resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
dependencies:
bl "^4.0.3"
end-of-stream "^1.4.1"
fs-constants "^1.0.0"
inherits "^2.0.3"
readable-stream "^3.1.1"
teeny-request@^7.1.3:
version "7.2.0"
resolved "https://registry.yarnpkg.com/teeny-request/-/teeny-request-7.2.0.tgz#41347ece068f08d741e7b86df38a4498208b2633"
@ -11151,6 +11291,11 @@ text-table@^0.2.0:
resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=
through@^2.3.8:
version "2.3.8"
resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
thunkify@^2.1.2:
version "2.1.2"
resolved "https://registry.yarnpkg.com/thunkify/-/thunkify-2.1.2.tgz#faa0e9d230c51acc95ca13a361ac05ca7e04553d"
@ -11374,6 +11519,14 @@ unbox-primitive@^1.0.2:
has-symbols "^1.0.3"
which-boxed-primitive "^1.0.2"
unbzip2-stream@1.4.3:
version "1.4.3"
resolved "https://registry.yarnpkg.com/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz#b0da04c4371311df771cdc215e87f2130991ace7"
integrity sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==
dependencies:
buffer "^5.2.1"
through "^2.3.8"
undefsafe@^2.0.5:
version "2.0.5"
resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c"
@ -11986,6 +12139,11 @@ write-file-atomic@^3.0.0:
signal-exit "^3.0.2"
typedarray-to-buffer "^3.1.5"
ws@8.8.1:
version "8.8.1"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.8.1.tgz#5dbad0feb7ade8ecc99b830c1d77c913d4955ff0"
integrity sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==
ws@>=7.4.6:
version "8.6.0"
resolved "https://registry.yarnpkg.com/ws/-/ws-8.6.0.tgz#e5e9f1d9e7ff88083d0c0dd8281ea662a42c9c23"
@ -12066,6 +12224,14 @@ yargs@^16.2.0:
y18n "^5.0.5"
yargs-parser "^20.2.2"
yauzl@^2.10.0:
version "2.10.0"
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
dependencies:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"
yn@3.1.1:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"