Compare commits
18 Commits
main
...
inga/manif
Author | SHA1 | Date | |
---|---|---|---|
|
c4cc2f3762 | ||
|
064c6d7575 | ||
|
6095263813 | ||
|
232bc55a47 | ||
|
f48cae1df3 | ||
|
ef5b0807f5 | ||
|
75e05c5bf7 | ||
|
22aab28e80 | ||
|
f3ef244422 | ||
|
9e6c9a088c | ||
|
a4fb6a847c | ||
|
e608f552f1 | ||
|
ad7827f2f1 | ||
|
7db3497bbe | ||
|
6382759e27 | ||
|
710a5afdac | ||
|
e312f799f9 | ||
|
04da05a47c |
22
common/contest.ts
Normal file
22
common/contest.ts
Normal 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 Philanthropy’s 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)
|
|
@ -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
|
||||
}
|
||||
|
|
114
functions/src/scripts/contest/create-markets.ts
Normal file
114
functions/src/scripts/contest/create-markets.ts
Normal 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',
|
||||
}
|
||||
}
|
697
functions/src/scripts/contest/criticism-and-red-teaming.ts
Normal file
697
functions/src/scripts/contest/criticism-and-red-teaming.ts
Normal 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 GiveWell’s 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 Philanthropy’s 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 Philanthropy’s 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 Cotra’s 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 MacAskill’s “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": "We’re 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 isn’t 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 one’s 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"
|
||||
}
|
||||
]
|
69
functions/src/scripts/contest/resolve-markets.ts
Normal file
69
functions/src/scripts/contest/resolve-markets.ts
Normal 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()
|
55
functions/src/scripts/contest/scrape-ea.ts
Normal file
55
functions/src/scripts/contest/scrape-ea.ts
Normal 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'
|
||||
)
|
725
functions/src/scripts/contest/submissions.ts
Normal file
725
functions/src/scripts/contest/submissions.ts
Normal 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 America’s Potential, or, “It’s 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',
|
||||
},
|
||||
]
|
|
@ -7,7 +7,8 @@
|
|||
"outDir": "lib",
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
"target": "es2017"
|
||||
"target": "es2017",
|
||||
"resolveJsonModule": true
|
||||
},
|
||||
"references": [
|
||||
{
|
||||
|
|
249
web/components/contests/contest-chat.tsx
Normal file
249
web/components/contests/contest-chat.tsx
Normal 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>
|
||||
)
|
||||
})
|
313
web/components/submission-search.tsx
Normal file
313
web/components/submission-search.tsx
Normal 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>
|
||||
)
|
||||
}
|
316
web/components/submission/submission-card.tsx
Normal file
316
web/components/submission/submission-card.tsx
Normal 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>
|
||||
)
|
||||
}
|
99
web/components/submission/submission-list.tsx
Normal file
99
web/components/submission/submission-list.tsx
Normal 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>
|
||||
)
|
||||
}
|
214
web/lib/firebase/contests.ts
Normal file
214
web/lib/firebase/contests.ts
Normal 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
|
||||
})
|
||||
}
|
|
@ -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}`
|
||||
}
|
||||
|
|
672
web/lib/util/contests/causeExploration.json
Normal file
672
web/lib/util/contests/causeExploration.json
Normal 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 America’s Potential, or, “It’s 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"
|
||||
}
|
||||
]
|
157
web/lib/util/contests/ea.json
Normal file
157
web/lib/util/contests/ea.json
Normal 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 & 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"
|
||||
}
|
||||
]
|
|
@ -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} />
|
||||
)}
|
||||
|
|
386
web/pages/contest/[...slugs]/index.tsx
Normal file
386
web/pages/contest/[...slugs]/index.tsx
Normal 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>
|
||||
)
|
||||
}
|
293
web/pages/contest/[contestSlug]/[submissionSlug].tsx
Normal file
293
web/pages/contest/[contestSlug]/[submissionSlug].tsx
Normal 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
151
web/pages/contests.tsx
Normal 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>
|
||||
)
|
||||
}
|
123
web/pages/submission-search-firestore.tsx
Normal file
123
web/pages/submission-search-firestore.tsx
Normal 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>
|
||||
)
|
||||
}
|
BIN
web/public/contests/ManiTrophy.png
Normal file
BIN
web/public/contests/ManiTrophy.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 221 KiB |
BIN
web/public/contests/cause-exploration-prize-prizes.png
Normal file
BIN
web/public/contests/cause-exploration-prize-prizes.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 42 KiB |
BIN
web/public/contests/cause-exploration-prize.png
Normal file
BIN
web/public/contests/cause-exploration-prize.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 218 KiB |
194
yarn.lock
194
yarn.lock
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue
Block a user