From 47c97c36db33d1ac3394a3d1aad5d19b95710f4e Mon Sep 17 00:00:00 2001 From: Austin Chen Date: Fri, 23 Sep 2022 12:01:31 -0400 Subject: [PATCH 01/30] Add Alignment Markets to Awesome Manifold --- docs/docs/awesome-manifold.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/docs/awesome-manifold.md b/docs/docs/awesome-manifold.md index 7a30fed6..066193d3 100644 --- a/docs/docs/awesome-manifold.md +++ b/docs/docs/awesome-manifold.md @@ -11,6 +11,7 @@ A list of community-created projects built on, or related to, Manifold Markets. - [CivicDashboard](https://civicdash.org/dashboard) - Uses Manifold to for tracked solutions for the SF city government - [Research.Bet](https://research.bet/) - Prediction market for scientific papers, using Manifold - [WagerWith.me](https://www.wagerwith.me/) — Bet with your friends, with full Manifold integration to bet with M$. +- [Alignment Markets](https://alignmentmarkets.com/) - Bet on the progress of benchmarks in ML safety! ## API / Dev @@ -28,6 +29,7 @@ A list of community-created projects built on, or related to, Manifold Markets. - [mana](https://github.com/AnnikaCodes/mana) - A Discord bot for Manifold by [@arae](https://manifold.markets/arae) ## Writeups + - [Information Markets, Decision Markets, Attention Markets, Action Markets](https://astralcodexten.substack.com/p/information-markets-decision-markets) by Scott Alexander - [Mismatched Monetary Motivation in Manifold Markets](https://kevin.zielnicki.com/2022/02/17/manifold/) by Kevin Zielnicki - [Introducing the Salem/CSPI Forecasting Tournament](https://www.cspicenter.com/p/introducing-the-salemcspi-forecasting) by Richard Hanania @@ -36,5 +38,5 @@ A list of community-created projects built on, or related to, Manifold Markets. ## Art -- Folded origami and doodles by [@hamnox](https://manifold.markets/hamnox) ![](https://i.imgur.com/nVGY4pL.png) -- Laser-cut Foldy by [@wasabipesto](https://manifold.markets/wasabipesto) ![](https://i.imgur.com/g9S6v3P.jpg) +- Folded origami and doodles by [@hamnox](https://manifold.markets/hamnox) ![](https://i.imgur.com/nVGY4pL.png) +- Laser-cut Foldy by [@wasabipesto](https://manifold.markets/wasabipesto) ![](https://i.imgur.com/g9S6v3P.jpg) From 61a9224a7d36e8b9f65a3a2739faf4aeb53015fe Mon Sep 17 00:00:00 2001 From: Austin Chen Date: Fri, 23 Sep 2022 12:10:48 -0400 Subject: [PATCH 02/30] Move Civid Dashboard and Research.Bet to Alumni --- docs/docs/awesome-manifold.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/docs/docs/awesome-manifold.md b/docs/docs/awesome-manifold.md index 066193d3..ed01f75c 100644 --- a/docs/docs/awesome-manifold.md +++ b/docs/docs/awesome-manifold.md @@ -8,8 +8,6 @@ A list of community-created projects built on, or related to, Manifold Markets. ## Sites using Manifold -- [CivicDashboard](https://civicdash.org/dashboard) - Uses Manifold to for tracked solutions for the SF city government -- [Research.Bet](https://research.bet/) - Prediction market for scientific papers, using Manifold - [WagerWith.me](https://www.wagerwith.me/) — Bet with your friends, with full Manifold integration to bet with M$. - [Alignment Markets](https://alignmentmarkets.com/) - Bet on the progress of benchmarks in ML safety! @@ -40,3 +38,10 @@ A list of community-created projects built on, or related to, Manifold Markets. - Folded origami and doodles by [@hamnox](https://manifold.markets/hamnox) ![](https://i.imgur.com/nVGY4pL.png) - Laser-cut Foldy by [@wasabipesto](https://manifold.markets/wasabipesto) ![](https://i.imgur.com/g9S6v3P.jpg) + +## Alumni + +_These projects are no longer active, but were really really cool!_ + +- [Research.Bet](https://research.bet/) - Prediction market for scientific papers, using Manifold +- [CivicDashboard](https://civicdash.org/dashboard) - Uses Manifold to for tracked solutions for the SF city government From ebcecd4fe93fb2d65cff10b0f3bbe9aab19b0afe Mon Sep 17 00:00:00 2001 From: Sinclair Chen Date: Fri, 23 Sep 2022 15:01:25 -0400 Subject: [PATCH 03/30] remove unused files --- web/public/praying-mantis-light.svg | 67 ----------------------- web/public/world-trading-background.webp | Bin 272522 -> 0 bytes web/tailwind.config.js | 3 - 3 files changed, 70 deletions(-) delete mode 100644 web/public/praying-mantis-light.svg delete mode 100644 web/public/world-trading-background.webp diff --git a/web/public/praying-mantis-light.svg b/web/public/praying-mantis-light.svg deleted file mode 100644 index cc82cd53..00000000 --- a/web/public/praying-mantis-light.svg +++ /dev/null @@ -1,67 +0,0 @@ - -image/svg+xml diff --git a/web/public/world-trading-background.webp b/web/public/world-trading-background.webp deleted file mode 100644 index 502beb2903f52fadc98d35377b37f58bc9713f44..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272522 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%0A!Kt*6vF!qBIG%;+SSgThfl<@aG~bR}KlX~hB1 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∨0J7AJ*R{VLU! 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

=iXtlt7@YJ|_=rrwFwGNjCQ|U9~!N3^b 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 diff --git a/web/tailwind.config.js b/web/tailwind.config.js index 7bea3ec2..57bc2dc5 100644 --- a/web/tailwind.config.js +++ b/web/tailwind.config.js @@ -15,9 +15,6 @@ module.exports = { } ), extend: { - backgroundImage: { - 'world-trading': "url('/world-trading-background.webp')", - }, colors: { 'greyscale-1': '#FBFBFF', 'greyscale-2': '#E7E7F4', From 5a10132e2b25f186cbb6c2f09557627445743dab Mon Sep 17 00:00:00 2001 From: FRC Date: Fri, 23 Sep 2022 15:11:50 -0400 Subject: [PATCH 04/30] Add a "Posts" tab to groups (#926) * Add a "Posts" sidebar item to groups * Fix James's nits * Show "Add Post" button only to users --- common/group.ts | 1 + functions/src/create-group.ts | 1 + functions/src/create-post.ts | 15 ++- functions/src/scripts/convert-tag-to-group.ts | 1 + web/components/create-post.tsx | 94 ++++++++++++++ web/components/groups/group-about-post.tsx | 18 ++- web/hooks/use-post.ts | 26 ++++ web/lib/firebase/api.ts | 6 +- web/lib/firebase/groups.ts | 1 + web/lib/firebase/posts.ts | 5 + web/pages/create-post.tsx | 93 ------------- web/pages/group/[...slugs]/index.tsx | 122 +++++++++++++++++- 12 files changed, 272 insertions(+), 111 deletions(-) create mode 100644 web/components/create-post.tsx delete mode 100644 web/pages/create-post.tsx diff --git a/common/group.ts b/common/group.ts index 871bc821..5220a1e8 100644 --- a/common/group.ts +++ b/common/group.ts @@ -10,6 +10,7 @@ export type Group = { totalContracts: number totalMembers: number aboutPostId?: string + postIds: string[] chatDisabled?: boolean mostRecentContractAddedTime?: number cachedLeaderboard?: { diff --git a/functions/src/create-group.ts b/functions/src/create-group.ts index 9d00bb0b..76dc1298 100644 --- a/functions/src/create-group.ts +++ b/functions/src/create-group.ts @@ -61,6 +61,7 @@ export const creategroup = newEndpoint({}, async (req, auth) => { anyoneCanJoin, totalContracts: 0, totalMembers: memberIds.length, + postIds: [], } await groupRef.create(group) diff --git a/functions/src/create-post.ts b/functions/src/create-post.ts index 40d39bba..113a34bd 100644 --- a/functions/src/create-post.ts +++ b/functions/src/create-post.ts @@ -34,11 +34,12 @@ const contentSchema: z.ZodType = z.lazy(() => const postSchema = z.object({ title: z.string().min(1).max(MAX_POST_TITLE_LENGTH), content: contentSchema, + groupId: z.string().optional(), }) export const createpost = newEndpoint({}, async (req, auth) => { const firestore = admin.firestore() - const { title, content } = validate(postSchema, req.body) + const { title, content, groupId } = validate(postSchema, req.body) const creator = await getUser(auth.uid) if (!creator) @@ -60,6 +61,18 @@ export const createpost = newEndpoint({}, async (req, auth) => { } await postRef.create(post) + if (groupId) { + const groupRef = firestore.collection('groups').doc(groupId) + const group = await groupRef.get() + if (group.exists) { + const groupData = group.data() + if (groupData) { + const postIds = groupData.postIds ?? [] + postIds.push(postRef.id) + await groupRef.update({ postIds }) + } + } + } return { status: 'success', post } }) diff --git a/functions/src/scripts/convert-tag-to-group.ts b/functions/src/scripts/convert-tag-to-group.ts index 3240357e..b2e4c4d8 100644 --- a/functions/src/scripts/convert-tag-to-group.ts +++ b/functions/src/scripts/convert-tag-to-group.ts @@ -41,6 +41,7 @@ const createGroup = async ( anyoneCanJoin: true, totalContracts: contracts.length, totalMembers: 1, + postIds: [], } await groupRef.create(group) // create a GroupMemberDoc for the creator diff --git a/web/components/create-post.tsx b/web/components/create-post.tsx new file mode 100644 index 00000000..c176e61d --- /dev/null +++ b/web/components/create-post.tsx @@ -0,0 +1,94 @@ +import { useState } from 'react' +import { Spacer } from 'web/components/layout/spacer' +import { Title } from 'web/components/title' +import Textarea from 'react-expanding-textarea' + +import { TextEditor, useTextEditor } from 'web/components/editor' +import { createPost } from 'web/lib/firebase/api' +import clsx from 'clsx' +import Router from 'next/router' +import { MAX_POST_TITLE_LENGTH } from 'common/post' +import { postPath } from 'web/lib/firebase/posts' +import { Group } from 'common/group' + +export function CreatePost(props: { group?: Group }) { + const [title, setTitle] = useState('') + const [error, setError] = useState('') + const [isSubmitting, setIsSubmitting] = useState(false) + + const { group } = props + + const { editor, upload } = useTextEditor({ + disabled: isSubmitting, + }) + + const isValid = editor && title.length > 0 && editor.isEmpty === false + + async function savePost(title: string) { + if (!editor) return + const newPost = { + title: title, + content: editor.getJSON(), + groupId: group?.id, + } + + const result = await createPost(newPost).catch((e) => { + console.log(e) + setError('There was an error creating the post, please try again') + return e + }) + if (result.post) { + await Router.push(postPath(result.post.slug)) + } + } + + return ( +

+
+ + <form> + <div className="form-control w-full"> + <label className="label"> + <span className="mb-1"> + Title<span className={'text-red-700'}> *</span> + </span> + </label> + <Textarea + placeholder="e.g. Elon Mania Post" + className="input input-bordered resize-none" + autoFocus + maxLength={MAX_POST_TITLE_LENGTH} + value={title} + onChange={(e) => setTitle(e.target.value || '')} + /> + <Spacer h={6} /> + <label className="label"> + <span className="mb-1"> + Content<span className={'text-red-700'}> *</span> + </span> + </label> + <TextEditor editor={editor} upload={upload} /> + <Spacer h={6} /> + + <button + type="submit" + className={clsx( + 'btn btn-primary normal-case', + isSubmitting && 'loading disabled' + )} + disabled={isSubmitting || !isValid || upload.isLoading} + onClick={async () => { + setIsSubmitting(true) + await savePost(title) + setIsSubmitting(false) + }} + > + {isSubmitting ? 'Creating...' : 'Create a post'} + </button> + {error !== '' && <div className="text-red-700">{error}</div>} + </div> + </form> + </div> + </div> + ) +} diff --git a/web/components/groups/group-about-post.tsx b/web/components/groups/group-about-post.tsx index b76d8037..4d3046e9 100644 --- a/web/components/groups/group-about-post.tsx +++ b/web/components/groups/group-about-post.tsx @@ -16,29 +16,26 @@ import { usePost } from 'web/hooks/use-post' export function GroupAboutPost(props: { group: Group isEditable: boolean - post: Post + post: Post | null }) { const { group, isEditable } = props const post = usePost(group.aboutPostId) ?? props.post return ( <div className="rounded-md bg-white p-4 "> - {isEditable ? ( - <RichEditGroupAboutPost group={group} post={post} /> - ) : ( - <Content content={post.content} /> - )} + {isEditable && <RichEditGroupAboutPost group={group} post={post} />} + {!isEditable && post && <Content content={post.content} />} </div> ) } -function RichEditGroupAboutPost(props: { group: Group; post: Post }) { +function RichEditGroupAboutPost(props: { group: Group; post: Post | null }) { const { group, post } = props const [editing, setEditing] = useState(false) const [isSubmitting, setIsSubmitting] = useState(false) const { editor, upload } = useTextEditor({ - defaultValue: post.content, + defaultValue: post?.content, disabled: isSubmitting, }) @@ -49,7 +46,7 @@ function RichEditGroupAboutPost(props: { group: Group; post: Post }) { content: editor.getJSON(), } - if (group.aboutPostId == null) { + if (post == null) { const result = await createPost(newPost).catch((e) => { console.error(e) return e @@ -65,6 +62,7 @@ function RichEditGroupAboutPost(props: { group: Group; post: Post }) { } async function deleteGroupAboutPost() { + if (post == null) return await deletePost(post) await deleteFieldFromGroup(group, 'aboutPostId') } @@ -91,7 +89,7 @@ function RichEditGroupAboutPost(props: { group: Group; post: Post }) { </> ) : ( <> - {group.aboutPostId == null ? ( + {post == null ? ( <div className="text-center text-gray-500"> <p className="text-sm"> No post has been added yet. diff --git a/web/hooks/use-post.ts b/web/hooks/use-post.ts index 9daf2d22..ff7bf6b9 100644 --- a/web/hooks/use-post.ts +++ b/web/hooks/use-post.ts @@ -11,3 +11,29 @@ export const usePost = (postId: string | undefined) => { return post } + +export const usePosts = (postIds: string[]) => { + const [posts, setPosts] = useState<Post[]>([]) + useEffect(() => { + if (postIds.length === 0) return + setPosts([]) + + const unsubscribes = postIds.map((postId) => + listenForPost(postId, (post) => { + if (post) { + setPosts((posts) => [...posts, post]) + } + }) + ) + + return () => { + unsubscribes.forEach((unsubscribe) => unsubscribe()) + } + }, [postIds]) + + return posts + .filter( + (post, index, self) => index === self.findIndex((t) => t.id === post.id) + ) + .sort((a, b) => b.createdTime - a.createdTime) +} diff --git a/web/lib/firebase/api.ts b/web/lib/firebase/api.ts index 6b1b43d8..8aa7a067 100644 --- a/web/lib/firebase/api.ts +++ b/web/lib/firebase/api.ts @@ -90,6 +90,10 @@ export function getCurrentUser(params: any) { return call(getFunctionUrl('getcurrentuser'), 'GET', params) } -export function createPost(params: { title: string; content: JSONContent }) { +export function createPost(params: { + title: string + content: JSONContent + groupId?: string +}) { return call(getFunctionUrl('createpost'), 'POST', params) } diff --git a/web/lib/firebase/groups.ts b/web/lib/firebase/groups.ts index 61424b8f..17e41c53 100644 --- a/web/lib/firebase/groups.ts +++ b/web/lib/firebase/groups.ts @@ -43,6 +43,7 @@ export function groupPath( | 'about' | typeof GROUP_CHAT_SLUG | 'leaderboards' + | 'posts' ) { return `/group/${groupSlug}${subpath ? `/${subpath}` : ''}` } diff --git a/web/lib/firebase/posts.ts b/web/lib/firebase/posts.ts index 162933af..36007048 100644 --- a/web/lib/firebase/posts.ts +++ b/web/lib/firebase/posts.ts @@ -39,3 +39,8 @@ export function listenForPost( ) { return listenForValue(doc(posts, postId), setPost) } + +export async function listPosts(postIds?: string[]) { + if (postIds === undefined) return [] + return Promise.all(postIds.map(getPost)) +} diff --git a/web/pages/create-post.tsx b/web/pages/create-post.tsx deleted file mode 100644 index 01147cc0..00000000 --- a/web/pages/create-post.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { useState } from 'react' -import { Spacer } from 'web/components/layout/spacer' -import { Page } from 'web/components/page' -import { Title } from 'web/components/title' -import Textarea from 'react-expanding-textarea' - -import { TextEditor, useTextEditor } from 'web/components/editor' -import { createPost } from 'web/lib/firebase/api' -import clsx from 'clsx' -import Router from 'next/router' -import { MAX_POST_TITLE_LENGTH } from 'common/post' -import { postPath } from 'web/lib/firebase/posts' - -export default function CreatePost() { - const [title, setTitle] = useState('') - const [error, setError] = useState('') - const [isSubmitting, setIsSubmitting] = useState(false) - - const { editor, upload } = useTextEditor({ - disabled: isSubmitting, - }) - - const isValid = editor && title.length > 0 && editor.isEmpty === false - - async function savePost(title: string) { - if (!editor) return - const newPost = { - title: title, - content: editor.getJSON(), - } - - const result = await createPost(newPost).catch((e) => { - console.log(e) - setError('There was an error creating the post, please try again') - return e - }) - if (result.post) { - await Router.push(postPath(result.post.slug)) - } - } - - return ( - <Page> - <div className="mx-auto w-full max-w-3xl"> - <div className="rounded-lg px-6 py-4 sm:py-0"> - <Title className="!mt-0" text="Create a post" /> - <form> - <div className="form-control w-full"> - <label className="label"> - <span className="mb-1"> - Title<span className={'text-red-700'}> *</span> - </span> - </label> - <Textarea - placeholder="e.g. Elon Mania Post" - className="input input-bordered resize-none" - autoFocus - maxLength={MAX_POST_TITLE_LENGTH} - value={title} - onChange={(e) => setTitle(e.target.value || '')} - /> - <Spacer h={6} /> - <label className="label"> - <span className="mb-1"> - Content<span className={'text-red-700'}> *</span> - </span> - </label> - <TextEditor editor={editor} upload={upload} /> - <Spacer h={6} /> - - <button - type="submit" - className={clsx( - 'btn btn-primary normal-case', - isSubmitting && 'loading disabled' - )} - disabled={isSubmitting || !isValid || upload.isLoading} - onClick={async () => { - setIsSubmitting(true) - await savePost(title) - setIsSubmitting(false) - }} - > - {isSubmitting ? 'Creating...' : 'Create a post'} - </button> - {error !== '' && <div className="text-red-700">{error}</div>} - </div> - </form> - </div> - </div> - </Page> - ) -} diff --git a/web/pages/group/[...slugs]/index.tsx b/web/pages/group/[...slugs]/index.tsx index f06247cd..0dfe40a0 100644 --- a/web/pages/group/[...slugs]/index.tsx +++ b/web/pages/group/[...slugs]/index.tsx @@ -16,7 +16,7 @@ import { import { Row } from 'web/components/layout/row' import { firebaseLogin, getUser, User } from 'web/lib/firebase/users' import { Col } from 'web/components/layout/col' -import { useUser } from 'web/hooks/use-user' +import { useUser, useUserById } from 'web/hooks/use-user' import { useGroup, useGroupContractIds, @@ -42,10 +42,10 @@ import { GroupComment } from 'common/comment' import { REFERRAL_AMOUNT } from 'common/economy' import { UserLink } from 'web/components/user-link' import { GroupAboutPost } from 'web/components/groups/group-about-post' -import { getPost } from 'web/lib/firebase/posts' +import { getPost, listPosts, postPath } from 'web/lib/firebase/posts' import { Post } from 'common/post' import { Spacer } from 'web/components/layout/spacer' -import { usePost } from 'web/hooks/use-post' +import { usePost, usePosts } from 'web/hooks/use-post' import { useAdmin } from 'web/hooks/use-admin' import { track } from '@amplitude/analytics-browser' import { ArrowLeftIcon } from '@heroicons/react/solid' @@ -53,6 +53,10 @@ import { SelectMarketsModal } from 'web/components/contract-select-modal' import { BETTORS } from 'common/user' import { Page } from 'web/components/page' import { Tabs } from 'web/components/layout/tabs' +import { Avatar } from 'web/components/avatar' +import { Title } from 'web/components/title' +import { fromNow } from 'web/lib/util/time' +import { CreatePost } from 'web/components/create-post' export const getStaticProps = fromPropz(getStaticPropz) export async function getStaticPropz(props: { params: { slugs: string[] } }) { @@ -70,7 +74,8 @@ export async function getStaticPropz(props: { params: { slugs: string[] } }) { ? 'all' : 'open' const aboutPost = - group && group.aboutPostId != null && (await getPost(group.aboutPostId)) + group && group.aboutPostId != null ? await getPost(group.aboutPostId) : null + const messages = group && (await listAllCommentsOnGroup(group.id)) const cachedTopTraderIds = @@ -83,6 +88,9 @@ export async function getStaticPropz(props: { params: { slugs: string[] } }) { const creator = await creatorPromise + const posts = ((group && (await listPosts(group.postIds))) ?? []).filter( + (p) => p != null + ) as Post[] return { props: { group, @@ -93,6 +101,7 @@ export async function getStaticPropz(props: { params: { slugs: string[] } }) { messages, aboutPost, suggestedFilter, + posts, }, revalidate: 60, // regenerate after a minute @@ -107,6 +116,7 @@ const groupSubpages = [ 'markets', 'leaderboards', 'about', + 'posts', ] as const export default function GroupPage(props: { @@ -116,8 +126,9 @@ export default function GroupPage(props: { topTraders: { user: User; score: number }[] topCreators: { user: User; score: number }[] messages: GroupComment[] - aboutPost: Post + aboutPost: Post | null suggestedFilter: 'open' | 'all' + posts: Post[] }) { props = usePropz(props, getStaticPropz) ?? { group: null, @@ -127,8 +138,9 @@ export default function GroupPage(props: { topCreators: [], messages: [], suggestedFilter: 'open', + posts: [], } - const { creator, topTraders, topCreators, suggestedFilter } = props + const { creator, topTraders, topCreators, suggestedFilter, posts } = props const router = useRouter() const { slugs } = router.query as { slugs: string[] } @@ -137,6 +149,12 @@ export default function GroupPage(props: { const group = useGroup(props.group?.id) ?? props.group const aboutPost = usePost(props.aboutPost?.id) ?? props.aboutPost + let groupPosts = usePosts(group?.postIds ?? []) ?? posts + + if (aboutPost != null) { + groupPosts = [aboutPost, ...groupPosts] + } + const user = useUser() const isAdmin = useAdmin() const memberIds = useMemberIds(group?.id ?? null) ?? props.memberIds @@ -172,6 +190,16 @@ export default function GroupPage(props: { </Col> ) + const postsPage = ( + <> + <Col> + <div className="mt-4 flex flex-col gap-8 px-4 md:flex-row"> + {posts && <GroupPosts posts={groupPosts} group={group} />} + </div> + </Col> + </> + ) + const aboutTab = ( <Col> {(group.aboutPostId != null || isCreator || isAdmin) && ( @@ -234,6 +262,10 @@ export default function GroupPage(props: { title: 'About', content: aboutTab, }, + { + title: 'Posts', + content: postsPage, + }, ] return ( @@ -413,6 +445,84 @@ function GroupLeaderboard(props: { ) } +function GroupPosts(props: { posts: Post[]; group: Group }) { + const { posts, group } = props + const [showCreatePost, setShowCreatePost] = useState(false) + const user = useUser() + + const createPost = <CreatePost group={group} /> + + const postList = ( + <div className=" align-start w-full items-start"> + <Row className="flex justify-between"> + <Col> + <Title text={'Posts'} className="!mt-0" /> + </Col> + <Col> + {user && ( + <Button + className="btn-md" + onClick={() => setShowCreatePost(!showCreatePost)} + > + Add a Post + </Button> + )} + </Col> + </Row> + + <div className="mt-2"> + {posts.map((post) => ( + <PostCard key={post.id} post={post} /> + ))} + {posts.length === 0 && ( + <div className="text-center text-gray-500">No posts yet</div> + )} + </div> + </div> + ) + + return showCreatePost ? createPost : postList +} + +function PostCard(props: { post: Post }) { + const { post } = props + const creatorId = post.creatorId + + const user = useUserById(creatorId) + + if (!user) return <> </> + + return ( + <div className="py-1"> + <Link href={postPath(post.slug)}> + <Row + className={ + 'relative gap-3 rounded-lg bg-white p-2 shadow-md hover:cursor-pointer hover:bg-gray-100' + } + > + <div className="flex-shrink-0"> + <Avatar className="h-12 w-12" username={user?.username} /> + </div> + <div className=""> + <div className="text-sm text-gray-500"> + <UserLink + className="text-neutral" + name={user?.name} + username={user?.username} + /> + <span className="mx-1">•</span> + <span className="text-gray-500">{fromNow(post.createdTime)}</span> + </div> + <div className="text-lg font-medium text-gray-900"> + {post.title} + </div> + </div> + </Row> + </Link> + </div> + ) +} + function AddContractButton(props: { group: Group; user: User }) { const { group, user } = props const [open, setOpen] = useState(false) From 57190e7876e5551044a63e99a9010004440fdb73 Mon Sep 17 00:00:00 2001 From: James Grugett <jahooma@gmail.com> Date: Fri, 23 Sep 2022 15:30:23 -0400 Subject: [PATCH 05/30] Daily trending sort option --- web/components/contract-search.tsx | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/web/components/contract-search.tsx b/web/components/contract-search.tsx index 919cce86..331dcb80 100644 --- a/web/components/contract-search.tsx +++ b/web/components/contract-search.tsx @@ -48,6 +48,7 @@ import { Title } from './title' export const SORTS = [ { label: 'Newest', value: 'newest' }, { label: 'Trending', value: 'score' }, + { label: 'Daily trending', value: 'daily-score' }, { label: '24h volume', value: '24-hour-vol' }, { label: 'Last updated', value: 'last-updated' }, { label: 'Closing soon', value: 'close-date' }, @@ -88,6 +89,7 @@ export function ContractSearch(props: { hideGroupLink?: boolean hideQuickBet?: boolean noLinkAvatar?: boolean + showProbChange?: boolean } headerClassName?: string persistPrefix?: string @@ -128,6 +130,7 @@ export function ContractSearch(props: { numPages: 1, pages: [] as Contract[][], showTime: null as ShowTime | null, + showProbChange: false, }, !persistPrefix ? undefined @@ -181,8 +184,9 @@ export function ContractSearch(props: { const newPage = results.hits as any as Contract[] const showTime = sort === 'close-date' || sort === 'resolve-date' ? sort : null + const showProbChange = sort === 'daily-score' const pages = freshQuery ? [newPage] : [...state.pages, newPage] - setState({ numPages: results.nbPages, pages, showTime }) + setState({ numPages: results.nbPages, pages, showTime, showProbChange }) if (freshQuery && isWholePage) window.scrollTo(0, 0) } } @@ -200,6 +204,12 @@ export function ContractSearch(props: { }, 100) ).current + const updatedCardUIOptions = useMemo(() => { + if (cardUIOptions?.showProbChange === undefined && state.showProbChange) + return { ...cardUIOptions, showProbChange: true } + return cardUIOptions + }, [cardUIOptions, state.showProbChange]) + const contracts = state.pages .flat() .filter((c) => !additionalFilter?.excludeContractIds?.includes(c.id)) @@ -236,7 +246,7 @@ export function ContractSearch(props: { showTime={state.showTime ?? undefined} onContractClick={onContractClick} highlightOptions={highlightOptions} - cardUIOptions={cardUIOptions} + cardUIOptions={updatedCardUIOptions} /> )} </Col> From deb8397ee935c1ac8e9d685381b93f6e2bdaf953 Mon Sep 17 00:00:00 2001 From: James Grugett <jahooma@gmail.com> Date: Fri, 23 Sep 2022 15:33:48 -0400 Subject: [PATCH 06/30] Add Daily Trending section (daily-score for you.) Remove recently updated --- web/pages/home/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/pages/home/index.tsx b/web/pages/home/index.tsx index f13fc200..de4e1c2f 100644 --- a/web/pages/home/index.tsx +++ b/web/pages/home/index.tsx @@ -106,9 +106,9 @@ export default function Home() { const HOME_SECTIONS = [ { label: 'Daily movers', id: 'daily-movers' }, + { label: 'Daily trending', id: 'daily-trending' }, { label: 'Trending', id: 'score' }, { label: 'New', id: 'newest' }, - { label: 'Recently updated', id: 'recently-updated-for-you' }, ] export const getHomeItems = (groups: Group[], sections: string[]) => { @@ -146,12 +146,12 @@ function renderSection( if (id === 'daily-movers') { return <DailyMoversSection key={id} userId={user?.id} /> } - if (id === 'recently-updated-for-you') + if (id === 'daily-trending') return ( <SearchSection key={id} label={label} - sort={'last-updated'} + sort={'daily-score'} pill="personal" user={user} /> From 0ab82a7bd49a89168e894938164529c278153367 Mon Sep 17 00:00:00 2001 From: James Grugett <jahooma@gmail.com> Date: Fri, 23 Sep 2022 15:40:48 -0400 Subject: [PATCH 07/30] Delete some unused code --- web/hooks/use-contracts.ts | 15 ------------ web/lib/firebase/contracts.ts | 46 ----------------------------------- 2 files changed, 61 deletions(-) diff --git a/web/hooks/use-contracts.ts b/web/hooks/use-contracts.ts index fb71ca60..053e2386 100644 --- a/web/hooks/use-contracts.ts +++ b/web/hooks/use-contracts.ts @@ -9,12 +9,10 @@ import { getUserBetContractsQuery, listAllContracts, trendingContractsQuery, - getContractsQuery, } from 'web/lib/firebase/contracts' import { QueryClient, useQuery, useQueryClient } from 'react-query' import { MINUTE_MS } from 'common/util/time' import { query, limit } from 'firebase/firestore' -import { Sort } from 'web/components/contract-search' import { dailyScoreIndex } from 'web/lib/service/algolia' import { CPMMBinaryContract } from 'common/contract' import { zipObject } from 'lodash' @@ -66,19 +64,6 @@ export const useTrendingContracts = (maxContracts: number) => { return result.data } -export const useContractsQuery = ( - sort: Sort, - maxContracts: number, - filters: { groupSlug?: string } = {}, - visibility?: 'public' -) => { - const result = useFirestoreQueryData( - ['contracts-query', sort, maxContracts, filters], - getContractsQuery(sort, maxContracts, filters, visibility) - ) - return result.data -} - export const useInactiveContracts = () => { const [contracts, setContracts] = useState<Contract[] | undefined>() diff --git a/web/lib/firebase/contracts.ts b/web/lib/firebase/contracts.ts index 927f7187..d7f6cd88 100644 --- a/web/lib/firebase/contracts.ts +++ b/web/lib/firebase/contracts.ts @@ -24,7 +24,6 @@ import { Bet } from 'common/bet' import { Comment } from 'common/comment' import { ENV_CONFIG } from 'common/envs/constants' import { getBinaryProb } from 'common/contract-details' -import { Sort } from 'web/components/contract-search' export const contracts = coll<Contract>('contracts') @@ -321,51 +320,6 @@ export const getTopGroupContracts = async ( return await getValues<Contract>(creatorContractsQuery) } -const sortToField = { - newest: 'createdTime', - score: 'popularityScore', - 'most-traded': 'volume', - '24-hour-vol': 'volume24Hours', - 'prob-change-day': 'probChanges.day', - 'last-updated': 'lastUpdated', - liquidity: 'totalLiquidity', - 'close-date': 'closeTime', - 'resolve-date': 'resolutionTime', - 'prob-descending': 'prob', - 'prob-ascending': 'prob', -} as const - -const sortToDirection = { - newest: 'desc', - score: 'desc', - 'most-traded': 'desc', - '24-hour-vol': 'desc', - 'prob-change-day': 'desc', - 'last-updated': 'desc', - liquidity: 'desc', - 'close-date': 'asc', - 'resolve-date': 'desc', - 'prob-ascending': 'asc', - 'prob-descending': 'desc', -} as const - -export const getContractsQuery = ( - sort: Sort, - maxItems: number, - filters: { groupSlug?: string } = {}, - visibility?: 'public' -) => { - const { groupSlug } = filters - return query( - contracts, - where('isResolved', '==', false), - ...(visibility ? [where('visibility', '==', visibility)] : []), - ...(groupSlug ? [where('groupSlugs', 'array-contains', groupSlug)] : []), - orderBy(sortToField[sort], sortToDirection[sort]), - limit(maxItems) - ) -} - export const getRecommendedContracts = async ( contract: Contract, excludeBettorId: string, From 1a5dcdedccce44c46b38318023e41466c0bf1a8b Mon Sep 17 00:00:00 2001 From: James Grugett <jahooma@gmail.com> Date: Fri, 23 Sep 2022 16:30:44 -0400 Subject: [PATCH 08/30] Delay prefetch by 1000ms. Don't prefetch portfolio history. --- common/util/time.ts | 3 +++ web/hooks/use-contracts.ts | 4 ++-- web/hooks/use-portfolio-history.ts | 4 ++-- web/hooks/use-prefetch.ts | 2 -- web/hooks/use-user-bets.ts | 4 ++-- 5 files changed, 9 insertions(+), 8 deletions(-) diff --git a/common/util/time.ts b/common/util/time.ts index 9afb8db4..81dc3600 100644 --- a/common/util/time.ts +++ b/common/util/time.ts @@ -1,3 +1,6 @@ export const MINUTE_MS = 60 * 1000 export const HOUR_MS = 60 * MINUTE_MS export const DAY_MS = 24 * HOUR_MS + +export const sleep = (ms: number) => + new Promise((resolve) => setTimeout(resolve, ms)) diff --git a/web/hooks/use-contracts.ts b/web/hooks/use-contracts.ts index 053e2386..11aae65c 100644 --- a/web/hooks/use-contracts.ts +++ b/web/hooks/use-contracts.ts @@ -11,7 +11,7 @@ import { trendingContractsQuery, } from 'web/lib/firebase/contracts' import { QueryClient, useQuery, useQueryClient } from 'react-query' -import { MINUTE_MS } from 'common/util/time' +import { MINUTE_MS, sleep } from 'common/util/time' import { query, limit } from 'firebase/firestore' import { dailyScoreIndex } from 'web/lib/service/algolia' import { CPMMBinaryContract } from 'common/contract' @@ -86,7 +86,7 @@ export const usePrefetchUserBetContracts = (userId: string) => { const queryClient = useQueryClient() return queryClient.prefetchQuery( ['contracts', 'bets', userId], - () => getUserBetContracts(userId), + () => sleep(1000).then(() => getUserBetContracts(userId)), { staleTime: 5 * MINUTE_MS } ) } diff --git a/web/hooks/use-portfolio-history.ts b/web/hooks/use-portfolio-history.ts index 6cc1a84e..1ae5e7ee 100644 --- a/web/hooks/use-portfolio-history.ts +++ b/web/hooks/use-portfolio-history.ts @@ -1,6 +1,6 @@ import { useQueryClient } from 'react-query' import { useFirestoreQueryData } from '@react-query-firebase/firestore' -import { DAY_MS, HOUR_MS, MINUTE_MS } from 'common/util/time' +import { DAY_MS, HOUR_MS, MINUTE_MS, sleep } from 'common/util/time' import { getPortfolioHistory, getPortfolioHistoryQuery, @@ -17,7 +17,7 @@ export const usePrefetchPortfolioHistory = (userId: string, period: Period) => { const cutoff = getCutoff(period) return queryClient.prefetchQuery( ['portfolio-history', userId, cutoff], - () => getPortfolioHistory(userId, cutoff), + () => sleep(1000).then(() => getPortfolioHistory(userId, cutoff)), { staleTime: 15 * MINUTE_MS } ) } diff --git a/web/hooks/use-prefetch.ts b/web/hooks/use-prefetch.ts index 46d78b3c..0e83613b 100644 --- a/web/hooks/use-prefetch.ts +++ b/web/hooks/use-prefetch.ts @@ -1,5 +1,4 @@ import { usePrefetchUserBetContracts } from './use-contracts' -import { usePrefetchPortfolioHistory } from './use-portfolio-history' import { usePrefetchUserBets } from './use-user-bets' export function usePrefetch(userId: string | undefined) { @@ -7,6 +6,5 @@ export function usePrefetch(userId: string | undefined) { return Promise.all([ usePrefetchUserBets(maybeUserId), usePrefetchUserBetContracts(maybeUserId), - usePrefetchPortfolioHistory(maybeUserId, 'weekly'), ]) } diff --git a/web/hooks/use-user-bets.ts b/web/hooks/use-user-bets.ts index 3731fb07..c28b453d 100644 --- a/web/hooks/use-user-bets.ts +++ b/web/hooks/use-user-bets.ts @@ -7,13 +7,13 @@ import { getUserBetsQuery, listenForUserContractBets, } from 'web/lib/firebase/bets' -import { MINUTE_MS } from 'common/util/time' +import { MINUTE_MS, sleep } from 'common/util/time' export const usePrefetchUserBets = (userId: string) => { const queryClient = useQueryClient() return queryClient.prefetchQuery( ['bets', userId], - () => getUserBets(userId), + () => sleep(1000).then(() => getUserBets(userId)), { staleTime: MINUTE_MS } ) } From 77ddc456a26fd55aa87299d2db4ed001f4003476 Mon Sep 17 00:00:00 2001 From: James Grugett <jahooma@gmail.com> Date: Fri, 23 Sep 2022 16:39:17 -0400 Subject: [PATCH 09/30] Add new home section to top. --- web/pages/home/index.tsx | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web/pages/home/index.tsx b/web/pages/home/index.tsx index de4e1c2f..c1a5f477 100644 --- a/web/pages/home/index.tsx +++ b/web/pages/home/index.tsx @@ -127,6 +127,10 @@ export const getHomeItems = (groups: Group[], sections: string[]) => { const sectionItems = filterDefined(sections.map((id) => itemsById[id])) + // Add new home section items to the top. + sectionItems.unshift( + ...HOME_SECTIONS.filter((item) => !sectionItems.includes(item)) + ) // Add unmentioned items to the end. sectionItems.push(...items.filter((item) => !sectionItems.includes(item))) From 490734db00805cd86789a0443089693ff42b06e9 Mon Sep 17 00:00:00 2001 From: James Grugett <jahooma@gmail.com> Date: Fri, 23 Sep 2022 16:43:23 -0400 Subject: [PATCH 10/30] If no user, show loading on home --- web/pages/home/index.tsx | 45 +++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/web/pages/home/index.tsx b/web/pages/home/index.tsx index c1a5f477..fda80c50 100644 --- a/web/pages/home/index.tsx +++ b/web/pages/home/index.tsx @@ -45,6 +45,7 @@ import { usePrefetch } from 'web/hooks/use-prefetch' import { Title } from 'web/components/title' import { CPMMBinaryContract } from 'common/contract' import { useContractsByDailyScoreGroups } from 'web/hooks/use-contracts' +import { LoadingIndicator } from 'web/components/loading-indicator' export default function Home() { const user = useUser() @@ -82,13 +83,17 @@ export default function Home() { <DailyStats user={user} /> </Row> - <> - {sections.map((section) => - renderSection(section, user, groups, groupContracts) - )} + {!user ? ( + <LoadingIndicator /> + ) : ( + <> + {sections.map((section) => + renderSection(section, user, groups, groupContracts) + )} - <TrendingGroupsSection user={user} /> - </> + <TrendingGroupsSection user={user} /> + </> + )} </Col> <button type="button" @@ -142,13 +147,13 @@ export const getHomeItems = (groups: Group[], sections: string[]) => { function renderSection( section: { id: string; label: string }, - user: User | null | undefined, + user: User, groups: Group[] | undefined, groupContracts: Dictionary<CPMMBinaryContract[]> | undefined ) { const { id, label } = section if (id === 'daily-movers') { - return <DailyMoversSection key={id} userId={user?.id} /> + return <DailyMoversSection key={id} userId={user.id} /> } if (id === 'daily-trending') return ( @@ -214,7 +219,7 @@ function SectionHeader(props: { function SearchSection(props: { label: string - user: User | null | undefined | undefined + user: User sort: Sort pill?: string }) { @@ -240,7 +245,7 @@ function SearchSection(props: { function GroupSection(props: { group: Group - user: User | null | undefined | undefined + user: User contracts: CPMMBinaryContract[] }) { const { group, user, contracts } = props @@ -251,18 +256,16 @@ function GroupSection(props: { <Button color="gray-white" onClick={() => { - if (user) { - const homeSections = (user.homeSections ?? []).filter( - (id) => id !== group.id - ) - updateUser(user.id, { homeSections }) + const homeSections = (user.homeSections ?? []).filter( + (id) => id !== group.id + ) + updateUser(user.id, { homeSections }) - toast.promise(leaveGroup(group, user.id), { - loading: 'Unfollowing group...', - success: `Unfollowed ${group.name}`, - error: "Couldn't unfollow group, try again?", - }) - } + toast.promise(leaveGroup(group, user.id), { + loading: 'Unfollowing group...', + success: `Unfollowed ${group.name}`, + error: "Couldn't unfollow group, try again?", + }) }} > <XCircleIcon className={'h-5 w-5 flex-shrink-0'} aria-hidden="true" /> From 2891a47d8c0ae66317b8315efb27e2e34453d52e Mon Sep 17 00:00:00 2001 From: Austin Chen <akrolsmir@gmail.com> Date: Fri, 23 Sep 2022 16:49:14 -0400 Subject: [PATCH 11/30] Support navigating to /about pages --- web/pages/group/[...slugs]/index.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/web/pages/group/[...slugs]/index.tsx b/web/pages/group/[...slugs]/index.tsx index 0dfe40a0..d768a222 100644 --- a/web/pages/group/[...slugs]/index.tsx +++ b/web/pages/group/[...slugs]/index.tsx @@ -145,6 +145,9 @@ export default function GroupPage(props: { const router = useRouter() const { slugs } = router.query as { slugs: string[] } const page = slugs?.[1] as typeof groupSubpages[number] + const tabIndex = ['markets', 'leaderboard', 'about', 'posts'].indexOf( + page as any + ) const group = useGroup(props.group?.id) ?? props.group const aboutPost = usePost(props.aboutPost?.id) ?? props.aboutPost @@ -277,7 +280,8 @@ export default function GroupPage(props: { /> <TopGroupNavBar group={group} /> <div className={'relative p-2 pt-0 md:pt-2'}> - <Tabs className={'mb-2'} tabs={tabs} /> + {/* TODO: Switching tabs should also update the group path */} + <Tabs className={'mb-2'} tabs={tabs} defaultIndex={tabIndex} /> </div> </Page> ) From d04304bdac284a6145aeee8ae51fb0b77bfda952 Mon Sep 17 00:00:00 2001 From: Austin Chen <akrolsmir@gmail.com> Date: Fri, 23 Sep 2022 17:04:32 -0400 Subject: [PATCH 12/30] Fix blank page on nav to groups --- web/pages/group/[...slugs]/index.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/pages/group/[...slugs]/index.tsx b/web/pages/group/[...slugs]/index.tsx index d768a222..bed244eb 100644 --- a/web/pages/group/[...slugs]/index.tsx +++ b/web/pages/group/[...slugs]/index.tsx @@ -146,7 +146,7 @@ export default function GroupPage(props: { const { slugs } = router.query as { slugs: string[] } const page = slugs?.[1] as typeof groupSubpages[number] const tabIndex = ['markets', 'leaderboard', 'about', 'posts'].indexOf( - page as any + page ?? 'markets' ) const group = useGroup(props.group?.id) ?? props.group From 96dc060a0a9018900d78a57e04000541d617dad0 Mon Sep 17 00:00:00 2001 From: Marshall Polaris <marshall@pol.rs> Date: Fri, 23 Sep 2022 14:55:06 -0700 Subject: [PATCH 13/30] Move react-masonry-css dependency to web package.json (#930) --- functions/package.json | 1 - web/package.json | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/functions/package.json b/functions/package.json index ba59f090..65d1fc07 100644 --- a/functions/package.json +++ b/functions/package.json @@ -40,7 +40,6 @@ "mailgun-js": "0.22.0", "module-alias": "2.2.2", "node-fetch": "2", - "react-masonry-css": "1.0.16", "stripe": "8.194.0", "zod": "3.17.2" }, diff --git a/web/package.json b/web/package.json index 6ee29183..dc49306f 100644 --- a/web/package.json +++ b/web/package.json @@ -58,6 +58,7 @@ "react-instantsearch-hooks-web": "6.24.1", "react-query": "3.39.0", "react-twitter-embed": "4.0.4", + "react-masonry-css": "1.0.16", "string-similarity": "^4.0.4", "tippy.js": "6.3.7" }, From e2a8df6c3a9d82495ccb855ac624b52d1ea54183 Mon Sep 17 00:00:00 2001 From: Marshall Polaris <marshall@pol.rs> Date: Fri, 23 Sep 2022 14:55:17 -0700 Subject: [PATCH 14/30] Nivo 0.74.0 -> 0.80.0 (#929) --- web/package.json | 6 +- yarn.lock | 222 ++++++++++++++++++++--------------------------- 2 files changed, 95 insertions(+), 133 deletions(-) diff --git a/web/package.json b/web/package.json index dc49306f..3ccbc96c 100644 --- a/web/package.json +++ b/web/package.json @@ -23,9 +23,9 @@ "@floating-ui/react-dom-interactions": "0.9.2", "@headlessui/react": "1.6.1", "@heroicons/react": "1.0.5", - "@nivo/core": "0.74.0", - "@nivo/line": "0.74.0", - "@nivo/tooltip": "0.74.0", + "@nivo/core": "0.80.0", + "@nivo/line": "0.80.0", + "@nivo/tooltip": "0.80.0", "@react-query-firebase/firestore": "0.4.2", "@tiptap/core": "2.0.0-beta.182", "@tiptap/extension-character-count": "2.0.0-beta.31", diff --git a/yarn.lock b/yarn.lock index 81cf80fa..b03bbcca 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2553,102 +2553,99 @@ resolved "https://registry.yarnpkg.com/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-12.3.1.tgz#27d71a95247a9eaee03d47adee7e3bd594514136" integrity sha512-W1ijvzzg+kPEX6LAc+50EYYSEo0FVu7dmTE+t+DM4iOLqgGHoW9uYSz9wCVdkXOEEMP9xhXfGpcSxsfDucyPkA== -"@nivo/annotations@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@nivo/annotations/-/annotations-0.74.0.tgz#f4a3474fdf8812c3812c30e08d3277e209bec0f6" - integrity sha512-nxZLKDi9YEy2zZUsOtbYL/2oAgsxK5SVZ1P3Csll+cQ96uLU6sU7jmb67AwK0nDbYk7BD3sZf/O/A9r/MCK4Ow== +"@nivo/annotations@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/annotations/-/annotations-0.80.0.tgz#127e4801fff7370dcfb9acfe1e335781dd65cfd5" + integrity sha512-bC9z0CLjU07LULTMWsqpjovRtHxP7n8oJjqBQBLmHOGB4IfiLbrryBfu9+aEZH3VN2jXHhdpWUz+HxeZzOzsLg== dependencies: - "@nivo/colors" "0.74.0" - "@react-spring/web" "9.2.6" + "@nivo/colors" "0.80.0" + "@react-spring/web" "9.4.5" lodash "^4.17.21" -"@nivo/axes@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@nivo/axes/-/axes-0.74.0.tgz#cf7cf2277b7aca5449a040ddf3e0cf9891971199" - integrity sha512-27o1H+Br0AaeUTiRhy7OebqzYEWr1xznHOxd+Hn2Xz9kK1alGBiPgwXrkXV0Q9CtrsroQFnX2QR3JxRgOtC5fA== +"@nivo/axes@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/axes/-/axes-0.80.0.tgz#22788855ddc45bb6a619dcd03d62d4bd8c0fc35f" + integrity sha512-AsUyaSHGwQVSEK8QXpsn8X+poZxvakLMYW7crKY1xTGPNw+SU4SSBohPVumm2jMH3fTSLNxLhAjWo71GBJXfdA== dependencies: - "@nivo/scales" "0.74.0" - "@react-spring/web" "9.2.6" + "@nivo/scales" "0.80.0" + "@react-spring/web" "9.4.5" d3-format "^1.4.4" d3-time-format "^3.0.0" -"@nivo/colors@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@nivo/colors/-/colors-0.74.0.tgz#29d1e7c6f3bcab4e872a168651b3a90cfba03a4f" - integrity sha512-5ClckmBm3x2XdJqHMylr6erY+scEL/twoGVfyXak/L+AIhL+Gf9PQxyxyfl3Lbtc3SPeAQe0ZAO1+VrmTn7qlA== +"@nivo/colors@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/colors/-/colors-0.80.0.tgz#5b70b4979df246d9d0d69fb638bba9764dd88b52" + integrity sha512-T695Zr411FU4RPo7WDINOAn8f79DPP10SFJmDdEqELE+cbzYVTpXqLGZ7JMv88ko7EOf9qxLQgcBqY69rp9tHQ== dependencies: d3-color "^2.0.0" d3-scale "^3.2.3" d3-scale-chromatic "^2.0.0" lodash "^4.17.21" - react-motion "^0.5.2" -"@nivo/core@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@nivo/core/-/core-0.74.0.tgz#7634c78a36a8bd50a0c04c6b6f12b779a88ec2f4" - integrity sha512-LZ3kN1PiEW0KU4PTBgaHFO757amyKZkEL4mKdAzvyNQtpq5idB3OhC/sYrBxhJaLqYcX19MgNfhIel/0KygHAg== +"@nivo/core@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/core/-/core-0.80.0.tgz#d180cb2622158eb7bc5f984131ff07984f12297e" + integrity sha512-6caih0RavXdWWSfde+rC2pk17WrX9YQlqK26BrxIdXzv3Ydzlh5SkrC7dR2TEvMGBhunzVeLOfiC2DWT1S8CFg== dependencies: - "@nivo/recompose" "0.74.0" - "@react-spring/web" "9.2.6" + "@nivo/recompose" "0.80.0" + "@react-spring/web" "9.4.5" d3-color "^2.0.0" d3-format "^1.4.4" - d3-hierarchy "^1.1.8" d3-interpolate "^2.0.1" d3-scale "^3.2.3" d3-scale-chromatic "^2.0.0" d3-shape "^1.3.5" d3-time-format "^3.0.0" lodash "^4.17.21" - resize-observer-polyfill "^1.5.1" -"@nivo/legends@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@nivo/legends/-/legends-0.74.0.tgz#8e5e04b2a3f980c2073a394d94c4d89fa8bc8724" - integrity sha512-Bfk392ngre1C8UaGoymwqK0acjjzuk0cglUSNsr0z8BAUQIVGUPthtfcxbq/yUYGJL/cxWky2QKxi9r3C0FbmA== +"@nivo/legends@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/legends/-/legends-0.80.0.tgz#49edc54000075b4df055f86794a8c32810269d06" + integrity sha512-h0IUIPGygpbKIZZZWIxkkxOw4SO0rqPrqDrykjaoQz4CvL4HtLIUS3YRA4akKOVNZfS5agmImjzvIe0s3RvqlQ== -"@nivo/line@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@nivo/line/-/line-0.74.0.tgz#f1f430d64a81d2fe1a5fd49e5cfaa61242066927" - integrity sha512-uJssLII1UTfxrZkPrkki054LFUpSKeqS35ttwK6VLvyqs5r3SrSXn223vDRNaaxuop5oT/L3APUJQwQDqUcj3w== +"@nivo/line@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/line/-/line-0.80.0.tgz#ba541b0fcfd53b3a7ce865feb43c993b7cf4a7d4" + integrity sha512-6UAD/y74qq3DDRnVb+QUPvXYojxMtwXMipGSNvCGk8omv1QZNTaUrbV+eQacvn9yh//a0yZcWipnpq0tGJyJCA== dependencies: - "@nivo/annotations" "0.74.0" - "@nivo/axes" "0.74.0" - "@nivo/colors" "0.74.0" - "@nivo/legends" "0.74.0" - "@nivo/scales" "0.74.0" - "@nivo/tooltip" "0.74.0" - "@nivo/voronoi" "0.74.0" - "@react-spring/web" "9.2.6" + "@nivo/annotations" "0.80.0" + "@nivo/axes" "0.80.0" + "@nivo/colors" "0.80.0" + "@nivo/legends" "0.80.0" + "@nivo/scales" "0.80.0" + "@nivo/tooltip" "0.80.0" + "@nivo/voronoi" "0.80.0" + "@react-spring/web" "9.4.5" d3-shape "^1.3.5" -"@nivo/recompose@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@nivo/recompose/-/recompose-0.74.0.tgz#057e8e1154073d7f4cb01aa8d165c3914b8bdb54" - integrity sha512-qC9gzGvDIxocrJoozDjqqffOwDpuEZijeMV59KExnztCwIpQbIYVBsDdpvL+tXfWausigSlnGILGfereXJTLUQ== +"@nivo/recompose@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/recompose/-/recompose-0.80.0.tgz#572048aed793321a0bada1fd176b72df5a25282e" + integrity sha512-iL3g7j3nJGD9+mRDbwNwt/IXDXH6E29mhShY1I7SP91xrfusZV9pSFf4EzyYgruNJk/2iqMuaqn+e+TVFra44A== dependencies: react-lifecycles-compat "^3.0.4" -"@nivo/scales@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@nivo/scales/-/scales-0.74.0.tgz#ede12b899da9e3aee7921ebce40f227e670a430d" - integrity sha512-5mER71NgZGdgs8X2PgilBpAWMMGtTXrUuYOBQWDKDMgtc83MU+mphhiYfLv5e6ViZyUB5ebfEkfeIgStLqrcEA== +"@nivo/scales@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/scales/-/scales-0.80.0.tgz#39313fb97c8ae9633c2aa1e17adb57cb851e8a50" + integrity sha512-4y2pQdCg+f3n4TKXC2tYuq71veZM+xPRQbOTgGYJpuBvMc7pQsXF9T5z7ryeIG9hkpXkrlyjecU6XcAG7tLSNg== dependencies: d3-scale "^3.2.3" d3-time "^1.0.11" d3-time-format "^3.0.0" lodash "^4.17.21" -"@nivo/tooltip@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@nivo/tooltip/-/tooltip-0.74.0.tgz#60d94b0fecc2fc179ada3efa380e7e456982b4a5" - integrity sha512-h3PUgNFF5HUeQFfx19MWS1uGK8iUDymZNY+5PyaCWDFT+0/ldXBu8uw5WYRui2KwNdTym6F0E/aT7JKczDd85w== +"@nivo/tooltip@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/tooltip/-/tooltip-0.80.0.tgz#07ebef47eb708a0612bd6297d5ad156bbec19d34" + integrity sha512-qGmrreRwnCsYjn/LAuwBtxBn/tvG8y+rwgd4gkANLBAoXd3bzJyvmkSe+QJPhUG64bq57ibDK+lO2pC48a3/fw== dependencies: - "@react-spring/web" "9.2.6" + "@react-spring/web" "9.4.5" -"@nivo/voronoi@0.74.0": - version "0.74.0" - resolved "https://registry.yarnpkg.com/@nivo/voronoi/-/voronoi-0.74.0.tgz#4b427955ddabd86934a2bbb95a62ff53ee97c575" - integrity sha512-Q3267T1+Tlufn8LbmSYnO8x9gL+h/iwH2Uqc5CENHSZu2KPD0PB82vxpQnbDVhjadulI0rlrPA9fU3VY3q1zKg== +"@nivo/voronoi@0.80.0": + version "0.80.0" + resolved "https://registry.yarnpkg.com/@nivo/voronoi/-/voronoi-0.80.0.tgz#59cc7ed253dc1a5bbcf614a5ac37d2468d561599" + integrity sha512-zaJV3I3cRu1gHpsXCIEvp6GGlGY8P7D9CwAVCjYDGrz3W/+GKN0kA7qGyHTC97zVxJtfefxSPlP/GtOdxac+qw== dependencies: d3-delaunay "^5.3.0" d3-scale "^3.2.3" @@ -2747,50 +2744,51 @@ resolved "https://registry.yarnpkg.com/@react-query-firebase/firestore/-/firestore-0.4.2.tgz#6ae52768715aa0a5c0d903dd4fd953ed417ba635" integrity sha512-7eYp905+sfBRcBTdj7W7BAc3bI3V0D0kKca4/juOTnN4gyoNyaCNOCjLPY467dTq325hGs7BX0ol7Pw3JENdHA== -"@react-spring/animated@~9.2.6-beta.0": - version "9.2.6" - resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.2.6.tgz#58f30fb75d8bfb7ccbc156cfd6b974a8f3dfd54e" - integrity sha512-xjL6nmixYNDvnpTs1FFMsMfSC0tURwPCU3b2jWNriYGLfwZ7c/TcyaEZA7yiNnmdFnuR3f3Z27AqIgaFC083Cw== +"@react-spring/animated@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/animated/-/animated-9.4.5.tgz#dd9921c716a4f4a3ed29491e0c0c9f8ca0eb1a54" + integrity sha512-KWqrtvJSMx6Fj9nMJkhTwM9r6LIriExDRV6YHZV9HKQsaolUFppgkOXpC+rsL1JEtEvKv6EkLLmSqHTnuYjiIA== dependencies: - "@react-spring/shared" "~9.2.6-beta.0" - "@react-spring/types" "~9.2.6-beta.0" + "@react-spring/shared" "~9.4.5" + "@react-spring/types" "~9.4.5" -"@react-spring/core@~9.2.6-beta.0": - version "9.2.6" - resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.2.6.tgz#ae22338fe55d070caf03abb4293b5519ba620d93" - integrity sha512-uPHUxmu+w6mHJrfQTMtmGJ8iZEwiVxz9kH7dRyk69bkZJt9z+w0Oj3UF4J3VcECZsbm3HRhN2ogXSAaqGjwhQw== +"@react-spring/core@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/core/-/core-9.4.5.tgz#4616e1adc18dd10f5731f100ebdbe9518b89ba3c" + integrity sha512-83u3FzfQmGMJFwZLAJSwF24/ZJctwUkWtyPD7KYtNagrFeQKUH1I05ZuhmCmqW+2w1KDW1SFWQ43RawqfXKiiQ== dependencies: - "@react-spring/animated" "~9.2.6-beta.0" - "@react-spring/shared" "~9.2.6-beta.0" - "@react-spring/types" "~9.2.6-beta.0" + "@react-spring/animated" "~9.4.5" + "@react-spring/rafz" "~9.4.5" + "@react-spring/shared" "~9.4.5" + "@react-spring/types" "~9.4.5" -"@react-spring/rafz@~9.2.6-beta.0": - version "9.2.6" - resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.2.6.tgz#d97484003875bf5fb5e6ec22dee97cc208363e48" - integrity sha512-62SivLKEpo7EfHPkxO5J3g9Cr9LF6+1A1RVOMJhkcpEYtbdbmma/d63Xp8qpMPEpk7uuWxaTb6jjyxW33pW3sg== +"@react-spring/rafz@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/rafz/-/rafz-9.4.5.tgz#84f809f287f2a66bbfbc66195db340482f886bd7" + integrity sha512-swGsutMwvnoyTRxvqhfJBtGM8Ipx6ks0RkIpNX9F/U7XmyPvBMGd3GgX/mqxZUpdlsuI1zr/jiYw+GXZxAlLcQ== -"@react-spring/shared@~9.2.6-beta.0": - version "9.2.6" - resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.2.6.tgz#2c84e62cc0cfbbbbeb5546acd46c1f4b248bc562" - integrity sha512-Qrm9fopKG/RxZ3Rw+4euhrpnB3uXSyiON9skHbcBfmkkzagpkUR66MX1YLrhHw0UchcZuSDnXs0Lonzt1rpWag== +"@react-spring/shared@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/shared/-/shared-9.4.5.tgz#4c3ad817bca547984fb1539204d752a412a6d829" + integrity sha512-JhMh3nFKsqyag0KM5IIM8BQANGscTdd0mMv3BXsUiMZrcjQTskyfnv5qxEeGWbJGGar52qr5kHuBHtCjQOzniA== dependencies: - "@react-spring/rafz" "~9.2.6-beta.0" - "@react-spring/types" "~9.2.6-beta.0" + "@react-spring/rafz" "~9.4.5" + "@react-spring/types" "~9.4.5" -"@react-spring/types@~9.2.6-beta.0": - version "9.2.6" - resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.2.6.tgz#f60722fcf9f8492ae16d0bdc47f0ea3c2a16d2cf" - integrity sha512-l7mCw182DtDMnCI8CB9orgTAEoFZRtdQ6aS6YeEAqYcy3nQZPmPggIHH9DxyLw7n7vBPRSzu9gCvUMgXKpTflg== +"@react-spring/types@~9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/types/-/types-9.4.5.tgz#9c71e5ff866b5484a7ef3db822bf6c10e77bdd8c" + integrity sha512-mpRIamoHwql0ogxEUh9yr4TP0xU5CWyZxVQeccGkHHF8kPMErtDXJlxyo0lj+telRF35XNihtPTWoflqtyARmg== -"@react-spring/web@9.2.6": - version "9.2.6" - resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.2.6.tgz#c4fba69e1b1b43bd1d6a62346530cfb07f2be09b" - integrity sha512-0HkRsEYR/CO3Uw46FWDWaF2wg2rUXcWE2R9AoZXthEYLUn5w9uE1mf2Jel7BxBxWGQ73owkqSQv+klA1Hb+ViQ== +"@react-spring/web@9.4.5": + version "9.4.5" + resolved "https://registry.yarnpkg.com/@react-spring/web/-/web-9.4.5.tgz#b92f05b87cdc0963a59ee149e677dcaff09f680e" + integrity sha512-NGAkOtKmOzDEctL7MzRlQGv24sRce++0xAY7KlcxmeVkR7LRSGkoXHaIfm9ObzxPMcPHQYQhf3+X9jepIFNHQA== dependencies: - "@react-spring/animated" "~9.2.6-beta.0" - "@react-spring/core" "~9.2.6-beta.0" - "@react-spring/shared" "~9.2.6-beta.0" - "@react-spring/types" "~9.2.6-beta.0" + "@react-spring/animated" "~9.4.5" + "@react-spring/core" "~9.4.5" + "@react-spring/shared" "~9.4.5" + "@react-spring/types" "~9.4.5" "@rushstack/eslint-patch@^1.1.3": version "1.1.3" @@ -5232,11 +5230,6 @@ d3-format@^1.4.4: resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.5.tgz#374f2ba1320e3717eb74a9356c67daee17a7edb4" integrity sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ== -d3-hierarchy@^1.1.8: - version "1.1.9" - resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.9.tgz#2f6bee24caaea43f8dc37545fa01628559647a83" - integrity sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ== - "d3-interpolate@1 - 2", "d3-interpolate@1.2.0 - 2", d3-interpolate@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-2.0.1.tgz#98be499cfb8a3b94d4ff616900501a64abc91163" @@ -9207,16 +9200,6 @@ path-type@^4.0.0: resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -9661,7 +9644,7 @@ prompts@^2.4.2: kleur "^3.0.3" sisteransi "^1.0.5" -prop-types@^15.5.8, prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: +prop-types@^15.6.2, prop-types@^15.7.2, prop-types@^15.8.1: version "15.8.1" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5" integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg== @@ -9922,13 +9905,6 @@ raf-schd@^4.0.2: resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.3.tgz#5d6c34ef46f8b2a0e880a8fcdb743efc5bfdbc1a" integrity sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ== -raf@^3.1.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" - integrity sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA== - dependencies: - performance-now "^2.1.0" - randombytes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -10128,15 +10104,6 @@ react-masonry-css@1.0.16: resolved "https://registry.yarnpkg.com/react-masonry-css/-/react-masonry-css-1.0.16.tgz#72b28b4ae3484e250534700860597553a10f1a2c" integrity sha512-KSW0hR2VQmltt/qAa3eXOctQDyOu7+ZBevtKgpNDSzT7k5LA/0XntNa9z9HKCdz3QlxmJHglTZ18e4sX4V8zZQ== -react-motion@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/react-motion/-/react-motion-0.5.2.tgz#0dd3a69e411316567927917c6626551ba0607316" - integrity sha512-9q3YAvHoUiWlP3cK0v+w1N5Z23HXMj4IF4YuvjvWegWqNPfLXsOBE/V7UvQGpXxHFKRQQcNcVQE31g9SB/6qgQ== - dependencies: - performance-now "^0.2.0" - prop-types "^15.5.8" - raf "^3.1.0" - react-query@3.39.0: version "3.39.0" resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.39.0.tgz#0caca7b0da98e65008bbcd4df0d25618c2100050" @@ -10538,11 +10505,6 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= -resize-observer-polyfill@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz#0e9020dd3d21024458d4ebd27e23e40269810464" - integrity sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg== - resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" From d990bc2f077c9085bb4185f7dc97bc1e2a602012 Mon Sep 17 00:00:00 2001 From: Marshall Polaris <marshall@pol.rs> Date: Fri, 23 Sep 2022 14:55:27 -0700 Subject: [PATCH 15/30] Remove images config from next.config.js (#931) --- web/next.config.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/web/next.config.js b/web/next.config.js index 21b375ba..cf727fd4 100644 --- a/web/next.config.js +++ b/web/next.config.js @@ -9,9 +9,6 @@ module.exports = { reactStrictMode: true, optimizeFonts: false, experimental: { - images: { - allowFutureImage: true, - }, scrollRestoration: true, externalDir: true, modularizeImports: { From 21c7130d3b303adb200d524d722e778ae479f2e3 Mon Sep 17 00:00:00 2001 From: James Grugett <jahooma@gmail.com> Date: Fri, 23 Sep 2022 18:58:05 -0400 Subject: [PATCH 16/30] Filter out markets with undefined probChanges in dev --- web/hooks/use-prob-changes.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/hooks/use-prob-changes.tsx b/web/hooks/use-prob-changes.tsx index f2f3ce13..132cfd64 100644 --- a/web/hooks/use-prob-changes.tsx +++ b/web/hooks/use-prob-changes.tsx @@ -41,7 +41,7 @@ export const useProbChanges = ( const hits = uniqBy( [...positiveChanges.hits, ...negativeChanges.hits], (c) => c.id - ) + ).filter((c) => c.probChanges) return sortBy(hits, (c) => Math.abs(c.probChanges.day)).reverse() } From ae4d49d9603447757342e5a10fef7e9dbd714427 Mon Sep 17 00:00:00 2001 From: Austin Chen <akrolsmir@gmail.com> Date: Sun, 25 Sep 2022 11:29:59 -0400 Subject: [PATCH 17/30] Generate markets for the Criticism and Red Teaming contest --- functions/package.json | 3 +- .../src/scripts/contest/create-markets.ts | 114 ++ .../contest/criticism-and-red-teaming.ts | 1219 +++++++++++++++++ functions/src/scripts/contest/scrape-ea.ts | 55 + yarn.lock | 174 ++- 5 files changed, 1550 insertions(+), 15 deletions(-) create mode 100644 functions/src/scripts/contest/create-markets.ts create mode 100644 functions/src/scripts/contest/criticism-and-red-teaming.ts create mode 100644 functions/src/scripts/contest/scrape-ea.ts diff --git a/functions/package.json b/functions/package.json index 65d1fc07..0397c5db 100644 --- a/functions/package.json +++ b/functions/package.json @@ -47,7 +47,8 @@ "@types/mailgun-js": "0.22.12", "@types/module-alias": "2.0.1", "@types/node-fetch": "2.6.2", - "firebase-functions-test": "0.3.3" + "firebase-functions-test": "0.3.3", + "puppeteer": "18.0.5" }, "private": true } diff --git a/functions/src/scripts/contest/create-markets.ts b/functions/src/scripts/contest/create-markets.ts new file mode 100644 index 00000000..f0d4962c --- /dev/null +++ b/functions/src/scripts/contest/create-markets.ts @@ -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 ?? 'anonymous'}`, + description: makeDescription(submission), + closeTime: Date.parse('2022-09-30').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(3, 6)) { + 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 ?? 'anonymous'}'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 any prize 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', + } +} diff --git a/functions/src/scripts/contest/criticism-and-red-teaming.ts b/functions/src/scripts/contest/criticism-and-red-teaming.ts new file mode 100644 index 00000000..0f19705a --- /dev/null +++ b/functions/src/scripts/contest/criticism-and-red-teaming.ts @@ -0,0 +1,1219 @@ +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": "Resource for criticisms and red teaming", + // "author": "Lizka", + // "link": "https://forum.effectivealtruism.org/posts/uuQDgiJJaswEyyzan/resource-for-criticisms-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: '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: 'My take on What We Owe the Future', + author: 'elifland', + link: 'https://forum.effectivealtruism.org/posts/9Y6Y6qoAigRC7A8eX/my-take-on-what-we-owe-the-future', + }, + { + 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: 'Leaning into EA Disillusionment', + author: 'Helen', + link: 'https://forum.effectivealtruism.org/posts/MjTB4MvtedbLjgyja/leaning-into-ea-disillusionment', + }, + { + title: 'Red Teaming CEA’s Community Building Work', + author: 'AnonymousEAForumAccount', + link: 'https://forum.effectivealtruism.org/posts/hbejbRBpd6quqnTAB/red-teaming-cea-s-community-building-work-2', + }, + { + 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: 'Effective Altruism as Coordination & Field Incubation', + author: 'DavidNash', + link: 'https://forum.effectivealtruism.org/posts/Zm6iaaJhoZsoZ2uMD/effective-altruism-as-coordination-and-field-incubation', + }, + { + title: 'Enlightenment Values in a Vulnerable World', + author: 'Maxwell Tabarrok', + link: 'https://forum.effectivealtruism.org/posts/A4fMkKhBxio83NtBL/enlightenment-values-in-a-vulnerable-world', + }, + { + title: "21 criticisms of EA I'm thinking about", + author: 'Peter Wildeford', + link: 'https://forum.effectivealtruism.org/posts/X47rn28Xy5TRfGgSj/21-criticisms-of-ea-i-m-thinking-about', + }, + { + title: 'Longtermism and Computational Complexity', + author: 'David Kinney', + link: 'https://forum.effectivealtruism.org/posts/RRyHcupuDafFNXt6p/longtermism-and-computational-complexity', + }, + { + title: 'The Community Manifesto', + author: 'dianaqianmorgan', + link: 'https://forum.effectivealtruism.org/posts/cY3wBXoJoeHXJ7XYt/the-community-manifesto', + }, + { + 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: "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: '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: + '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: 'Red-teaming contest: demographics and power structures in EA', + author: 'TheOtherHannah', + link: 'https://forum.effectivealtruism.org/posts/oD3zus6LhbhBj6z2F/red-teaming-contest-demographics-and-power-structures-in-ea', + }, + { + 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: + '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: 'Population Ethics Without Axiology: A Framework', + author: 'Lukas_Gloor', + link: 'https://forum.effectivealtruism.org/posts/dQvDxDMyueLyydHw4/population-ethics-without-axiology-a-framework', + }, + { + 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: 'Red teaming introductory EA courses', + author: 'Philip Hall Andersen', + link: 'https://forum.effectivealtruism.org/posts/JDEDsCaQd2CYm7QEi/red-teaming-introductory-ea-courses', + }, + { + title: 'Systemic Cascading Risks: Relevance in Longtermism & Value Lock-In', + author: 'Richard Ren', + link: 'https://forum.effectivealtruism.org/posts/mWGodAi9Mv2a2EbNj/systemic-cascading-risks-relevance-in-longtermism-and-value', + }, + { + title: + 'community building solely as a tool for impact creates toxic communities', + author: 'ruthgrace', + link: 'https://forum.effectivealtruism.org/posts/EpMQBmQv7e4yaDYYN/community-building-solely-as-a-tool-for-impact-creates-toxic', + }, + { + 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: + "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: 'Changing the world through slack & hobbies', + author: 'Steven Byrnes', + link: 'https://forum.effectivealtruism.org/posts/ZkhABk4rRMqsNmwvf/changing-the-world-through-slack-and-hobbies', + }, + { + 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: '"Doing Good Best" isn\'t the EA ideal', + author: 'Davidmanheim', + link: 'https://forum.effectivealtruism.org/posts/f9NpDx65zY6Qk9ofe/doing-good-best-isn-t-the-ea-ideal', + }, + { + title: 'The discount rate is not zero', + author: 'Thomaaas', + link: 'https://forum.effectivealtruism.org/posts/zLZMsthcqfmv5J6Ev/the-discount-rate-is-not-zero', + }, + { + title: 'Questioning the Foundations of EA', + author: 'Wei_Dai', + link: 'https://forum.effectivealtruism.org/posts/zvNwSG2Xvy8x5Rtba/questioning-the-foundations-of-ea', + }, + { + title: + 'Notes on how prizes may fail and how to reduce the risk of them failing', + author: 'Peter Wildeford', + link: 'https://forum.effectivealtruism.org/posts/h2WcJf7pg5Qdfhsm3/notes-on-how-prizes-may-fail-and-how-to-reduce-the-risk-of', + }, + { + 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: 'Things usually end slowly', + author: 'OllieBase', + link: 'https://forum.effectivealtruism.org/posts/qLwtCuh6nDCsrsrMK/things-usually-end-slowly', + }, + { + 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: 'Animal Zoo', + author: 'bericlair', + link: 'https://forum.effectivealtruism.org/posts/YfmdnkmnoWBhmBaQL/animal-zoo', + }, + { + title: 'Summaries are underrated', + author: 'Nathan Young', + link: 'https://forum.effectivealtruism.org/posts/nDawZHxDR3j53zdbf/summaries-are-underrated', + }, + { + 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: + 'The great energy descent (short version) - An important thing EA might have missed', + author: 'Corentin Biteau', + link: 'https://forum.effectivealtruism.org/posts/wXzc75txE5hbHqYug/the-great-energy-descent-short-version-an-important-thing-ea', + }, + { + title: 'The Long Reflection as the Great Stagnation ', + author: 'Larks', + link: 'https://forum.effectivealtruism.org/posts/o5Q8dXfnHTozW9jkY/the-long-reflection-as-the-great-stagnation', + }, + { + title: 'Community posts: The Forum needs a way to work in public', + author: 'Nathan Young', + link: 'https://forum.effectivealtruism.org/posts/NxWssGagWoQWErRer/community-posts-the-forum-needs-a-way-to-work-in-public', + }, + { + title: 'Improving Karma: $8mn of possible value (my estimate)', + author: 'Nathan Young', + link: 'https://forum.effectivealtruism.org/posts/YajssmjwKndBTahQx/improving-karma-usd8mn-of-possible-value-my-estimate', + }, + { + 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: '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: '[TikTok] Comparability between suffering and happiness', + author: 'Ben_West', + link: 'https://forum.effectivealtruism.org/posts/ASmtarf3ADYb2Xmrt/tiktok-comparability-between-suffering-and-happiness', + }, + { + 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: + 'Criticism of EA Criticisms: Is the real disagreement about cause prio?', + author: 'Akash', + link: 'https://forum.effectivealtruism.org/posts/qgQaWub8iR2EERq7i/criticism-of-ea-criticisms-is-the-real-disagreement-about', + }, + { + title: 'Effective Altruism Should Seek Less Criticism', + author: 'The Chaostician', + link: 'https://forum.effectivealtruism.org/posts/oQA7Z6JKHAwvWz9wk/effective-altruism-should-seek-less-criticism', + }, + { + title: + 'The great energy descent - Part 1: Can renewables replace fossil fuels?', + author: 'Corentin Biteau', + link: 'https://forum.effectivealtruism.org/posts/qG8k5pzhaDk6FhcYv/the-great-energy-descent-part-1-can-renewables-replace', + }, + { + title: 'We’re searching for meaning, not happiness (et al.)', + author: 'Joshua Clingo', + link: 'https://forum.effectivealtruism.org/posts/gmTYoTmggojK5bywA/we-re-searching-for-meaning-not-happiness-et-al', + }, + { + 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: + 'Popular EA Authors Should Give Libraries More Copies of Their EBooks', + author: 'RedTeamPseudonym', + link: 'https://forum.effectivealtruism.org/posts/AAL2zPtg7T6bjWijT/popular-ea-authors-should-give-libraries-more-copies-of', + }, + { + title: 'this one weird trick creates infinite utility', + author: 'Hmash', + link: 'https://forum.effectivealtruism.org/posts/BwuLaA97BAtLcbuuF/this-one-weird-trick-creates-infinite-utility', + }, + { + title: 'Think again: Should EA be a social movement?', + author: 'An A', + link: 'https://forum.effectivealtruism.org/posts/giznESHxt45SvuhZw/think-again-should-ea-be-a-social-movement', + }, + { + title: 'Rethinking longtermism and global development', + author: 'BrownHairedEevee', + link: 'https://forum.effectivealtruism.org/posts/GAEjbu2eHRXPHwTxF/rethinking-longtermism-and-global-development', + }, + { + title: 'Hiring: The Ignored Resource of Rejected EA Job Candidates', + author: 'RedTeamPseudonym', + link: 'https://forum.effectivealtruism.org/posts/ekLyLdiCCcD6BqbJR/hiring-the-ignored-resource-of-rejected-ea-job-candidates-1', + }, + { + title: 'Suggestions for 80,000K ', + author: 'RedTeamPseudonym', + link: 'https://forum.effectivealtruism.org/posts/MdvGwL4hTM2B96x4d/suggestions-for-80-000k', + }, + { + 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: + 'A Need for Final Chapter Revision in Intro EA Fellowship Curricula & Other Ways to Fix Holes in The Funnel', + author: 'RedTeamPseudonym', + link: 'https://forum.effectivealtruism.org/posts/AaXDbHZhJYgxLCjYZ/a-need-for-final-chapter-revision-in-intro-ea-fellowship', + }, + { + title: 'Moral Injury, Mental Health, and Obsession in EA', + author: 'ECJ', + link: 'https://forum.effectivealtruism.org/posts/jiiyBcoZXXXT7eFHm/moral-injury-mental-health-and-obsession-in-ea', + }, + { + 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: 'EA is too reliant on personal connections', + author: 'sawyer', + link: 'https://forum.effectivealtruism.org/posts/dvcpKuajunxdaZ6se/ea-is-too-reliant-on-personal-connections', + }, + { + 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: 'Effective altruism in the garden of ends', + author: 'tyleralterman', + link: 'https://forum.effectivealtruism.org/posts/AjxqsDmhGiW9g8ju6/effective-altruism-in-the-garden-of-ends', + }, + { + 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: 'Effective altruism is no longer the right name for the movement', + author: 'ParthThaya', + link: 'https://forum.effectivealtruism.org/posts/2FB8tK9da89qksZ9E/effective-altruism-is-no-longer-the-right-name-for-the-1', + }, + { + 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: 'Ways money can make things worse', + author: 'Jan_Kulveit', + link: 'https://forum.effectivealtruism.org/posts/YKEPXLQhYjm3nP7Td/ways-money-can-make-things-worse', + }, + { + 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: 'EA on nuclear war and expertise', + author: 'bean', + link: 'https://forum.effectivealtruism.org/posts/bCB88GKeXTaxozr6y/ea-on-nuclear-war-and-expertise', + }, + { + title: 'The most important climate change uncertainty', + author: 'cwa', + link: 'https://forum.effectivealtruism.org/posts/nBN6NENeudd2uJBCQ/the-most-important-climate-change-uncertainty', + }, + { + 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: + '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: + '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'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: 'Criticism of EA Criticism Contest', + author: 'Zvi ', + link: 'https://forum.effectivealtruism.org/posts/qjMPATBLM5p4ABcEB/criticism-of-ea-criticism-contest', + }, + { + 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: 'Slowing down AI progress is an underexplored alignment strategy', + author: 'Michael Huang', + link: 'https://forum.effectivealtruism.org/posts/6LNvQYyNQpDQmnnux/slowing-down-ai-progress-is-an-underexplored-alignment', + }, + { + 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: '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: 'Chesterton Fences and EA’s X-risks', + author: 'jehan', + link: 'https://forum.effectivealtruism.org/posts/j4RnXAQgyMCSLzBkW/chesterton-fences-and-ea-s-x-risks', + }, + { + 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: 'An Evaluation of Animal Charity Evaluators ', + author: 'eaanonymous1234', + link: 'https://forum.effectivealtruism.org/posts/pfSiMpkmskRB4WxYW/an-evaluation-of-animal-charity-evaluators', + }, + { + 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: 'Let’s not glorify people for how they look.', + author: 'Florence', + link: 'https://forum.effectivealtruism.org/posts/8ii5SD7HBL4EdYw5K/let-s-not-glorify-people-for-how-they-look-2', + }, + { + 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: 'Future Paths for Effective Altruism', + author: 'James Broughel', + link: 'https://forum.effectivealtruism.org/posts/yzAoHcTzf3AjeGYsP/future-paths-for-effective-altruism', + }, + { + title: 'The Effective Altruism culture', + author: 'PabloAMC', + link: 'https://forum.effectivealtruism.org/posts/NkF9rAjZpkDajqDDt/the-effective-altruism-culture', + }, + { + 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: 'Criticism of the main framework in AI alignment', + author: 'Michele Campolo', + link: 'https://forum.effectivealtruism.org/posts/Cs8qhNakLuLXY4GvE/criticism-of-the-main-framework-in-ai-alignment', + }, + { + title: 'Crowdsourced Criticisms: What does EA think about EA?', + author: 'Hmash', + link: 'https://forum.effectivealtruism.org/posts/jK2Qends7GnyaRhm2/crowdsourced-criticisms-what-does-ea-think-about-ea', + }, + { + title: + 'EAs should recommend cost-effective interventions in more cause areas (not just the most pressing ones) \n\n', + author: 'Amber Dawn', + link: 'https://forum.effectivealtruism.org/posts/JiEyCNoGD3WwTgDkG/eas-should-recommend-cost-effective-interventions-in-more', + }, + { + title: + 'AGI Battle Royale: Why “slow takeover” scenarios devolve into a chaotic multi-AGI fight to the death', + author: 'titotal', + link: 'https://forum.effectivealtruism.org/posts/TxrzhfRr6EXiZHv4G/agi-battle-royale-why-slow-takeover-scenarios-devolve-into-a', + }, + { + title: 'Effective means to combat autocracies', + author: 'Junius Brutus', + link: 'https://forum.effectivealtruism.org/posts/kawE7rFmp3SkzLxpx/effective-means-to-combat-autocracies', + }, + { + title: 'Editing wild animals is underexplored in What We Owe the Future', + author: 'Michael Huang', + link: 'https://forum.effectivealtruism.org/posts/cWnQMagKFqJoaGA5M/editing-wild-animals-is-underexplored-in-what-we-owe-the', + }, + { + title: 'Reasons for my negative feelings towards the AI risk discussion', + author: 'fergusq', + link: 'https://forum.effectivealtruism.org/posts/hLbWWuDr3EbeQqrmg/reasons-for-my-negative-feelings-towards-the-ai-risk', + }, + { + 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: '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: + '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: 'On longtermism, Bayesianism, and the doomsday argument', + author: 'iporphyry', + link: 'https://forum.effectivealtruism.org/posts/f2RzSd2ukFZyNB86L/on-longtermism-bayesianism-and-the-doomsday-argument', + }, + { + title: 'Friendship is Optimal: EAGs should be online', + author: 'Emrik', + link: 'https://forum.effectivealtruism.org/posts/35nRwEyzCKDfh3dCr/friendship-is-optimal-eags-should-be-online', + }, + { + title: 'A Critique of AI Takeover Scenarios', + author: 'Fods12', + link: 'https://forum.effectivealtruism.org/posts/j7X8nQ7YvvA7Pi4BX/a-critique-of-ai-takeover-scenarios', + }, + { + 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: '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: + 'The Role of "Economism" in the Belief-Formation Systems of Effective Altruism', + author: 'Thomas Aitken', + link: 'https://forum.effectivealtruism.org/posts/cR4pCrATD5SSN35Sm/the-role-of-economism-in-the-belief-formation-systems-of', + }, + { + title: + 'A slightly (I think?) different slant on why EA elitism bias/top-university focus/lack of diversity is a problem', + author: 'RedTeamPseudonym', + link: 'https://forum.effectivealtruism.org/posts/LCfQCvtFyAEnxCnMf/a-slightly-i-think-different-slant-on-why-ea-elitism-bias', + }, + { + title: 'Chaining the evil genie: why "outer" AI safety is probably easy', + author: 'titotal', + link: 'https://forum.effectivealtruism.org/posts/AoPR8BFrAFgGGN9iZ/chaining-the-evil-genie-why-outer-ai-safety-is-probably-easy', + }, + { + 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: 'Aesthetics as Epistemic Humility', + author: 'Étienne Fortier-Dubois', + link: 'https://forum.effectivealtruism.org/posts/bo6Jsvmq9oiykbDrM/aesthetics-as-epistemic-humility', + }, + { + title: + "What if states don't listen? A fundamental gap in x-risk reduction strategies ", + author: 'HTC', + link: 'https://forum.effectivealtruism.org/posts/sFxtu6ZKAScDSqLrK/what-if-states-don-t-listen-a-fundamental-gap-in-x-risk', + }, + { + title: 'Eliminate or Adjust Strong Upvotes to Improve the Forum', + author: 'Afternoon Coffee', + link: 'https://forum.effectivealtruism.org/posts/2XGFdBkxa5Hm5LWZq/eliminate-or-adjust-strong-upvotes-to-improve-the-forum', + }, + { + title: 'On the Philosophical Foundations of EA', + author: 'mm6', + link: 'https://forum.effectivealtruism.org/posts/gLWmeKTe68ZHnomwy/on-the-philosophical-foundations-of-ea', + }, + { + 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: 'Be More Succinct', + author: 'RedTeamPseudonym', + link: 'https://forum.effectivealtruism.org/posts/eNa8GpEi5HX94CZ2n/be-more-succinct', + }, + { + title: 'Against Anthropic Shadow', + author: 'tobycrisford', + link: 'https://forum.effectivealtruism.org/posts/A47EWTS6oBKLqxBpw/against-anthropic-shadow', + }, + { + 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: '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: + '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: + 'Should EA influence governments to enact more effective interventions?', + author: 'Markus Amalthea Magnuson', + link: 'https://forum.effectivealtruism.org/posts/pGPcfjxazPGFJyYHW/should-ea-influence-governments-to-enact-more-effective', + }, + { + title: 'Should large EA nonprofits consider splitting?', + author: 'Arepo', + link: 'https://forum.effectivealtruism.org/posts/J3pZ7fY6yvypvJrJE/should-large-ea-nonprofits-consider-splitting', + }, + { + title: + "Evaluating large-scale movement building: A better way to critique Open Philanthropy's criminal justice reform", + author: 'ruthgrace', + link: 'https://forum.effectivealtruism.org/posts/7ajePuRKiCo7fA92B/evaluating-large-scale-movement-building-a-better-way-to', + }, + { + title: 'Evaluation of Longtermist Institutional Reform', + author: 'Dwarkesh Patel', + link: 'https://forum.effectivealtruism.org/posts/v4Z6phNcDsdXtzj2K/evaluation-of-longtermist-institutional-reform', + }, + { + 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: 'The danger of good stories', + author: 'DuncanS', + link: 'https://forum.effectivealtruism.org/posts/eZK95zxwpzNySRebC/the-danger-of-good-stories', + }, + { + title: 'A dilemma for Maximize Expected Choiceworthiness (MEC)', + author: 'Calvin_Baker', + link: 'https://forum.effectivealtruism.org/posts/Gk7NhzFy2hHFdFTYr/a-dilemma-for-maximize-expected-choiceworthiness-mec', + }, + { + 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: 'Proposed tweak to the longtermism pitch', + author: 'TheOtherHannah', + link: 'https://forum.effectivealtruism.org/posts/nAvpSXELT2FZMD9aA/proposed-tweak-to-the-longtermism-pitch', + }, + { + title: 'EA vs. FIRE – reconciling these two movements', + author: 'Stewed_Walrus', + link: 'https://forum.effectivealtruism.org/posts/j2ccaxmHcjiwGDs9T/ea-vs-fire-reconciling-these-two-movements', + }, + { + 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: 'Prediction Markets are Somewhat Overrated Within EA', + author: 'Francis', + link: 'https://forum.effectivealtruism.org/posts/4LsrNczpF6mfrHP4M/prediction-markets-are-somewhat-overrated-within-ea', + }, + { + 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: 'EA Worries and Criticism ', + author: 'Connor Tabarrok', + link: 'https://forum.effectivealtruism.org/posts/A5tRZC2mduJfpMhud/ea-worries-and-criticism', + }, + { + 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: '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: 'Red Team: Write More.', + author: 'Weaver', + link: 'https://forum.effectivealtruism.org/posts/5A5cMh223b9s4uHwE/red-team-write-more', + }, + { + title: 'End-To-End Encryption For EA', + author: 'Talking Tree', + link: 'https://forum.effectivealtruism.org/posts/tekdQKdfFe3YJTwML/end-to-end-encryption-for-ea', + }, + { + title: 'Effective Altruism is Unkind', + author: 'Oliver Scott Curry', + link: 'https://forum.effectivealtruism.org/posts/cC6tGHctzrMmEAH8j/effective-altruism-is-unkind', + }, + { + title: 'Towards a more ecumenical EA movement ', + author: 'Locke', + link: 'https://forum.effectivealtruism.org/posts/NR2Y2B8Y4Wxn8pAS8/towards-a-more-ecumenical-ea-movement', + }, + { + 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: + 'The great energy descent - Part 2: Limits to growth and why we probably won’t reach the stars', + author: 'Corentin Biteau', + link: 'https://forum.effectivealtruism.org/posts/8sW4h368DsoooHBNP/the-great-energy-descent-part-2-limits-to-growth-and-why-we', + }, + { + 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: 'Should we call ourselves effective altruists?', + author: 'Sam_Coggins', + link: 'https://forum.effectivealtruism.org/posts/YyDRSARnXz8r5dgca/should-we-call-ourselves-effective-altruists', + }, + { + title: 'Compounding assumptions and what it mean to be altruistic', + author: 'Badger', + link: 'https://forum.effectivealtruism.org/posts/4RGuqDxui2xWkXnda/compounding-assumptions-and-what-it-mean-to-be-altruistic', + }, + { + title: + 'The great energy descent - Post 3: What we can do, what we can’t do', + author: 'Corentin Biteau', + link: 'https://forum.effectivealtruism.org/posts/9zTLPy3zqJ7YfS7kn/the-great-energy-descent-post-3-what-we-can-do-what-we-can-t', + }, + { + title: 'Enantiodromia', + author: 'ChristianKleineidam', + link: 'https://forum.effectivealtruism.org/posts/b4ASDM434qh3rxLki/enantiodromia', + }, + { + title: 'Deontology, the Paralysis Argument and altruistic longtermism', + author: "William D'Alessandro", + link: 'https://forum.effectivealtruism.org/posts/DKe5eQhJoLNMWgaQv/deontology-the-paralysis-argument-and-altruistic-longtermism', + }, + { + title: 'Path dependence and its impact on long-term outcomes', + author: 'Archanaa', + link: 'https://forum.effectivealtruism.org/posts/jadS8deYknecGSebp/path-dependence-and-its-impact-on-long-term-outcomes', + }, + { + title: 'Histories of Value Lock-in and Ideology Critique', + author: 'clem', + link: 'https://forum.effectivealtruism.org/posts/poWd3CcGeQPas3Zbo/histories-of-value-lock-in-and-ideology-critique', + }, + { + title: 'A Case Against Strong Longtermism', + author: 'A. Wolff', + link: 'https://forum.effectivealtruism.org/posts/LADQ6dTGsQ2BBMrBv/a-case-against-strong-longtermism-1', + }, + { + 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: 'Forecasting Through Fiction', + author: 'Yitz', + link: 'https://forum.effectivealtruism.org/posts/DhJhtxMX6SdYAsWiY/forecasting-through-fiction', + }, + { + title: 'EA Undervalues Unseen Data', + author: 'tcelferact', + link: 'https://forum.effectivealtruism.org/posts/MpYPCq9dW8wovYpRY/ea-undervalues-unseen-data', + }, + { + title: 'The Happiness Maximizer:\nWhy EA is an x-risk', + author: 'Obasi Shaw', + link: 'https://forum.effectivealtruism.org/posts/ByHc6jdXF9skwevYf/the-happiness-maximizer-why-ea-is-an-x-risk', + }, + { + title: 'EA is a fight against Knightian uncertainty', + author: 'Rohit (Strange Loop)', + link: 'https://forum.effectivealtruism.org/posts/vic7EdWCGKd4fYtYd/ea-is-a-fight-against-knightian-uncertainty', + }, + { + 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: '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: 'A critique of strong longtermism', + author: 'Pablo Rosado', + link: 'https://forum.effectivealtruism.org/posts/ryJys2fAz7J4vAwFC/a-critique-of-strong-longtermism', + }, + { + title: 'Making EA More Effective', + author: 'Peter Kelly', + link: 'https://forum.effectivealtruism.org/posts/Ag6bsmqxwqWTSjcHX/making-ea-more-effective', + }, + { + title: "A part of the system's apology", + author: 'Niv Cohen', + link: 'https://forum.effectivealtruism.org/posts/vNTD4mBAzfyZFJkfW/a-part-of-the-system-s-apology', + }, + { + title: 'The Wages of North-Atlantic Bias', + author: 'Sach Wry', + link: 'https://forum.effectivealtruism.org/posts/FA4tC72qAB5k37uFC/the-wages-of-north-atlantic-bias', + }, + { + title: 'Keeping it Real', + author: 'calumdavey', + link: 'https://forum.effectivealtruism.org/posts/ewEiyspZeqjZC7Yh7/keeping-it-real', + }, + { + title: 'Hobbit Manifesto', + author: 'Clay Cube', + link: 'https://forum.effectivealtruism.org/posts/3caZ7LhMsvsS7kRrz/hobbit-manifesto', + }, + { + title: + "How avoiding drastic career changes could support EA's epistemic health and long-term efficacy.", + author: 'nat goldthwaite', + link: 'https://forum.effectivealtruism.org/posts/3txJdk6ZcNmcRBjWP/how-avoiding-drastic-career-changes-could-support-ea-s', + }, + { + title: + "Present-day good intentions aren't sufficient to make the longterm future good in expectation", + author: 'trurl', + link: 'https://forum.effectivealtruism.org/posts/FBNk5ibcWwYcavkh4/present-day-good-intentions-aren-t-sufficient-to-make-the', + }, + { + title: + 'A podcast episode exploring critiques of effective altruism (with Michael Nielsen and Ajeya Cotra)', + author: 'spencerg', + link: 'https://forum.effectivealtruism.org/posts/2dHk3zBmmnNTefjWB/a-podcast-episode-exploring-critiques-of-effective-altruism', + }, + { + title: 'Follow-up: Crowdsourced Criticisms', + author: 'Hmash', + link: 'https://forum.effectivealtruism.org/posts/kXCsTDB5s7QRnWS8f/follow-up-crowdsourced-criticisms', + }, + { + 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: '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: + 'On the institutional critique of effective altruism: a response (mainly) to Brian Berkey ', + author: 'zzz1407', + link: 'https://forum.effectivealtruism.org/posts/GgNgnzjqceDghhozf/on-the-institutional-critique-of-effective-altruism-a-1', + }, + { + title: + 'We Can’t Do Long Term Utilitarian Calculations Until We Know if AIs Can Be Conscious or Not', + author: 'Mike20731', + link: 'https://forum.effectivealtruism.org/posts/Zsz3BYQTJjJdZd4DR/we-can-t-do-long-term-utilitarian-calculations-until-we-know', + }, + { + 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: + 'Reciprocity & the causes of diminishing returns: cause exploration submission', + link: 'https://forum.effectivealtruism.org/posts/x9towRLtvYidkXugk/reciprocity-and-the-causes-of-diminishing-returns-cause', + }, + { + title: + 'Altruism is systems change, so why isn’t EA? Constructive criticism.', + 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 EA community should utilize the concept of beliefs more often', + author: 'Noah Scales', + link: 'https://forum.effectivealtruism.org/posts/9SKqeNSvAKozeMvGq/the-ea-community-should-utilize-the-concept-of-beliefs-more', + }, + { + title: 'Why bother doing the most good?', + author: 'Dov', + link: 'https://forum.effectivealtruism.org/posts/ZPcKeZbcC5SgLGLwg/why-bother-doing-the-most-good', + }, + { + title: + 'Framing EA as tending towards longtermism might be diminishing its potential impact', + author: 'Mm', + link: 'https://forum.effectivealtruism.org/posts/guGteQYvwcuDAECPA/framing-ea-as-tending-towards-longtermism-might-be', + }, + { + title: 'Bernard Williams: Ethics and the limits of impartiality', + author: 'peterhartree', + link: 'https://forum.effectivealtruism.org/posts/G6EWTrArPDf74sr3S/bernard-williams-ethics-and-the-limits-of-impartiality', + }, + { + 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: 'Critique: Cost-Benefit of Weirdness', + author: 'Mike Elias', + link: 'https://forum.effectivealtruism.org/posts/kw8ZmziAwcqPW2jt6/critique-cost-benefit-of-weirdness', + }, + { + title: 'Hits- or misses-based giving', + author: 'brb243', + link: 'https://forum.effectivealtruism.org/posts/XzawnaT4jyqpkEihz/hits-or-misses-based-giving', + }, + { + title: 'Mind your step', + author: 'Talsome', + link: 'https://forum.effectivealtruism.org/posts/rGNaz4GtWCzPbCWCB/mind-your-step', + }, + { + title: 'Against Impartial Altruism', + author: 'Sam K', + link: 'https://forum.effectivealtruism.org/posts/f5ZxK2k9gyZthHGND/against-impartial-altruism', + }, + { + title: 'Criticism of EA and longtermism', + author: 'St. Ignorant', + link: 'https://forum.effectivealtruism.org/posts/DuG8rBSAErSmSN7uE/criticism-of-ea-and-longtermism', + }, + { + 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: 'Effective Altruism Criticisms', + author: 'Gavin Palmer (heroLFG.com)', + link: 'https://forum.effectivealtruism.org/posts/mMaAcvNLQPC3aTqB6/effective-altruism-criticisms', + }, + { + title: '"Of Human Bondage" and Morality', + author: 'Casaubon', + link: 'https://forum.effectivealtruism.org/posts/ZJnKCToBojYqqQphb/of-human-bondage-and-morality', + }, + { + 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: 'Effective altruism in a non-ideal world', + author: 'Eric Kramer', + link: 'https://forum.effectivealtruism.org/posts/2nApcLJsZeABu38uW/effective-altruism-in-a-non-ideal-world', + }, + { + title: 'The future of humanity', + author: 'Dem0sthenes', + link: 'https://forum.effectivealtruism.org/posts/nLyG65eQepKKeGbrg/the-future-of-humanity', + }, + { + title: + 'Investigating Ideology: want to earn money, help EA and/or me? Then check this out; it may be a mighty neglected cause ', + author: 'Dov', + link: 'https://forum.effectivealtruism.org/posts/twaKWNjAc4KEz3kMq/investigating-ideology-want-to-earn-money-help-ea-and-or-me', + }, + { + 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: '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', + }, + { + title: + 'Effective Altruism Goes Political: Normative Conflicts and Practical Judgment', + author: 'Michael Haiden', + link: 'https://forum.effectivealtruism.org/posts/aisE9yhZHuiM9Cdn7/effective-altruism-goes-political-normative-conflicts-and-1', + }, + { + title: 'Values lock-in is already happening (without AGI)', + link: 'https://forum.effectivealtruism.org/posts/ogwD28mzJy8dkwtmc/values-lock-in-is-already-happening-without-agi', + }, + { + title: 'EA Should Rename Itself', + author: 'Name Rectifier', + link: 'https://forum.effectivealtruism.org/posts/swkxLtjG9z7RY7i9x/ea-should-rename-itself', + }, + { + title: 'What we are for? Community, Correction and Scale [wip]', + author: 'Nathan Young', + link: 'https://forum.effectivealtruism.org/posts/QCv5GNcQFeH34iN2w/what-we-are-for-community-correction-and-scale-wip', + }, + { + 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: 'Run For President', + author: 'Brian Moore', + link: 'https://forum.effectivealtruism.org/posts/ZniCnE8XhCMLeGHj8/run-for-president', + }, + { + title: 'Effective Altruism Risks Perpetuating a Harmful Worldview', + author: 'Theo Cox', + link: 'https://forum.effectivealtruism.org/posts/QRaf9iWvGbfKgWBvY/effective-altruism-risks-perpetuating-a-harmful-worldview', + }, +] diff --git a/functions/src/scripts/contest/scrape-ea.ts b/functions/src/scripts/contest/scrape-ea.ts new file mode 100644 index 00000000..c22f4ac7 --- /dev/null +++ b/functions/src/scripts/contest/scrape-ea.ts @@ -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' +) diff --git a/yarn.lock b/yarn.lock index b03bbcca..9829f0b1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3564,6 +3564,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.36.0": version "5.36.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.36.0.tgz#8f159c4cdb3084eb5d4b72619a2ded942aa109e5" @@ -4316,7 +4323,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== @@ -4346,6 +4353,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" @@ -4459,6 +4475,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" @@ -4469,6 +4490,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" @@ -4648,6 +4677,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" @@ -5014,7 +5048,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== @@ -5336,7 +5370,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== @@ -5492,6 +5526,11 @@ detective@^5.2.1: defined "^1.0.0" minimist "^1.2.6" +devtools-protocol@0.0.1036444: + version "0.0.1036444" + resolved "https://registry.yarnpkg.com/devtools-protocol/-/devtools-protocol-0.0.1036444.tgz#a570d3cdde61527c82f9b03919847b8ac7b1c2b9" + integrity sha512-0y4f/T8H9lsESV9kKP1HDUXgHxCdniFeJh6Erq+FbdOEvp/Ydp9t8kcAAM5gOd17pMrTDlFWntoHtzzeTUWKNw== + dicer@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/dicer/-/dicer-0.3.1.tgz#abf28921e3475bc5e801e74e0159fd94f927ba97" @@ -6232,6 +6271,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" @@ -6314,6 +6364,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" @@ -6573,6 +6630,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" @@ -7291,6 +7353,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" @@ -7299,14 +7369,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" @@ -7329,6 +7391,11 @@ idb@7.0.1: resolved "https://registry.yarnpkg.com/idb/-/idb-7.0.1.tgz#d2875b3a2f205d854ee307f6d196f246fea590a7" integrity sha512-UUxlE7vGWK5RfB/fDwEGgRf84DY/ieqNha6msMV99UsEMQhJ1RwbCd8AYBj3QMgnE3VZnfQvm4oKVCJTYlqIgg== +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" @@ -7402,7 +7469,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== @@ -8557,6 +8624,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" @@ -9200,6 +9272,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== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -9622,6 +9699,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@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -9812,7 +9894,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== @@ -9861,6 +9943,23 @@ pupa@^2.1.1: dependencies: escape-goat "^2.0.0" +puppeteer@18.0.5: + version "18.0.5" + resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-18.0.5.tgz#873223b17b92345182c5b5e8cfbd6f3117f1547d" + integrity sha512-s4erjxU0VtKojPvF+KvLKG6OHUPw7gO2YV1dtOsoryyCbhrs444fXb4QZqGWuTv3V/rgSCUzeixxu34g0ZkSMA== + dependencies: + cross-fetch "3.1.5" + debug "4.3.4" + devtools-protocol "0.0.1036444" + 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" @@ -10241,7 +10340,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== @@ -11329,6 +11428,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" @@ -11366,6 +11486,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" @@ -11589,6 +11714,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" @@ -12196,6 +12329,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" @@ -12276,6 +12414,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" From c1c3a360fd9b2c20222a80630f6384ec70771efd Mon Sep 17 00:00:00 2001 From: Austin Chen <akrolsmir@gmail.com> Date: Sun, 25 Sep 2022 13:08:34 -0400 Subject: [PATCH 18/30] Add CART contest to /tournaments --- functions/src/scripts/contest/create-markets.ts | 5 +++-- web/pages/tournaments/index.tsx | 9 ++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/functions/src/scripts/contest/create-markets.ts b/functions/src/scripts/contest/create-markets.ts index f0d4962c..ba7245fe 100644 --- a/functions/src/scripts/contest/create-markets.ts +++ b/functions/src/scripts/contest/create-markets.ts @@ -30,8 +30,9 @@ async function postMarket(submission: CEPSubmission) { initialProb: 10, // Super secret options: // groupId: 'y2hcaGybXT1UfobK3XTx', // [DEV] CEP Tournament - groupId: 'h3MhjYbSSG6HbxY8ZTwE', // [DEV] CART // groupId: 'cMcpBQ2p452jEcJD2SFw', // [PROD] Predict CEP + groupId: 'h3MhjYbSSG6HbxY8ZTwE', // [DEV] CART + // groupId: 'K86LmEmidMKdyCHdHNv4', // [PROD] CART visibility: 'unlisted', // TODO: Increase liquidity? }), @@ -41,7 +42,7 @@ async function postMarket(submission: CEPSubmission) { } async function postAll() { - for (const submission of data.slice(3, 6)) { + for (const submission of data.slice(0, 3)) { await postMarket(submission) } } diff --git a/web/pages/tournaments/index.tsx b/web/pages/tournaments/index.tsx index 8378b185..0b9dbc80 100644 --- a/web/pages/tournaments/index.tsx +++ b/web/pages/tournaments/index.tsx @@ -107,7 +107,14 @@ const tourneys: Tourney[] = [ groupId: 'SxGRqXRpV3RAQKudbcNb', }, - // Tournaments without awards get featured belows + // Tournaments without awards get featured below + { + title: 'Criticism and Red Teaming Contest', + blurb: + 'Which criticisms of Effective Altruism have been the most valuable?', + endTime: toDate('Sep 30, 2022'), + groupId: 'K86LmEmidMKdyCHdHNv4', + }, { title: 'SF 2022 Ballot', blurb: 'Which ballot initiatives will pass this year in SF and CA?', From be2c60d3f3a518909f3eef93af6f31f9e408e4ce Mon Sep 17 00:00:00 2001 From: Marshall Polaris <marshall@pol.rs> Date: Sun, 25 Sep 2022 16:43:53 -0700 Subject: [PATCH 19/30] Fix some rendering issues on contract page (#933) * Memoize calculating sale amount on your bets list * Don't re-render more than necessary with `useIsMobile` hook * Use `useIsMobile` hook in `AmountInput` --- web/components/amount-input.tsx | 5 ++--- web/components/bets-list.tsx | 22 ++++++++++++++-------- web/hooks/use-is-mobile.ts | 16 +++++++++++----- 3 files changed, 27 insertions(+), 16 deletions(-) diff --git a/web/components/amount-input.tsx b/web/components/amount-input.tsx index 2ad745a8..76581d9e 100644 --- a/web/components/amount-input.tsx +++ b/web/components/amount-input.tsx @@ -5,7 +5,7 @@ import { formatMoney } from 'common/util/format' import { Col } from './layout/col' import { SiteLink } from './site-link' import { ENV_CONFIG } from 'common/envs/constants' -import { useWindowSize } from 'web/hooks/use-window-size' +import { useIsMobile } from 'web/hooks/use-is-mobile' export function AmountInput(props: { amount: number | undefined @@ -34,8 +34,7 @@ export function AmountInput(props: { const isInvalid = !str || isNaN(amount) onChange(isInvalid ? undefined : amount) } - const { width } = useWindowSize() - const isMobile = (width ?? 0) < 768 + const isMobile = useIsMobile(768) return ( <Col className={className}> <label className="input-group mb-4"> diff --git a/web/components/bets-list.tsx b/web/components/bets-list.tsx index 97d11758..74480de5 100644 --- a/web/components/bets-list.tsx +++ b/web/components/bets-list.tsx @@ -610,18 +610,24 @@ function BetRow(props: { const isNumeric = outcomeType === 'NUMERIC' const isPseudoNumeric = outcomeType === 'PSEUDO_NUMERIC' - const saleAmount = saleBet?.sale?.amount + // calculateSaleAmount is very slow right now so that's why we memoized this + const payout = useMemo(() => { + const saleBetAmount = saleBet?.sale?.amount + if (saleBetAmount) { + return saleBetAmount + } else if (contract.isResolved) { + return resolvedPayout(contract, bet) + } else { + return calculateSaleAmount(contract, bet, unfilledBets) + } + }, [contract, bet, saleBet, unfilledBets]) const saleDisplay = isAnte ? ( 'ANTE' - ) : saleAmount !== undefined ? ( - <>{formatMoney(saleAmount)} (sold)</> + ) : saleBet ? ( + <>{formatMoney(payout)} (sold)</> ) : ( - formatMoney( - isResolved - ? resolvedPayout(contract, bet) - : calculateSaleAmount(contract, bet, unfilledBets) - ) + formatMoney(payout) ) const payoutIfChosenDisplay = diff --git a/web/hooks/use-is-mobile.ts b/web/hooks/use-is-mobile.ts index 9ce0133c..7e99a97d 100644 --- a/web/hooks/use-is-mobile.ts +++ b/web/hooks/use-is-mobile.ts @@ -1,7 +1,13 @@ -import { useWindowSize } from 'web/hooks/use-window-size' +import { useEffect, useState } from 'react' -// matches talwind sm breakpoint -export function useIsMobile() { - const { width } = useWindowSize() - return (width ?? 0) < 640 +export function useIsMobile(threshold?: number) { + const [isMobile, setIsMobile] = useState<boolean>() + useEffect(() => { + // 640 matches tailwind sm breakpoint + const onResize = () => setIsMobile(window.innerWidth < (threshold ?? 640)) + onResize() + window.addEventListener('resize', onResize) + return () => window.removeEventListener('resize', onResize) + }, [threshold]) + return isMobile } From 68120ec2b2f01a8d687626d7cf29dc3a3e5268b5 Mon Sep 17 00:00:00 2001 From: James Grugett <jahooma@gmail.com> Date: Sun, 25 Sep 2022 23:29:13 -0400 Subject: [PATCH 20/30] Revert "Clean up and fix stuff on answers panel (#914)" This reverts commit 721448f40811889cb8780f7c1ea5c537fbbc4fb1. --- web/components/answers/answers-panel.tsx | 41 ++++++++++++++++-------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/web/components/answers/answers-panel.tsx b/web/components/answers/answers-panel.tsx index 51cf5799..a1cef4c3 100644 --- a/web/components/answers/answers-panel.tsx +++ b/web/components/answers/answers-panel.tsx @@ -38,13 +38,26 @@ export function AnswersPanel(props: { const answers = (useAnswers(contract.id) ?? contract.answers).filter( (a) => a.number != 0 || contract.outcomeType === 'MULTIPLE_CHOICE' ) - const [winningAnswers, notWinningAnswers] = partition( - answers, - (a) => a.id === resolution || (resolutions && resolutions[a.id]) + const hasZeroBetAnswers = answers.some((answer) => totalBets[answer.id] < 1) + + const [winningAnswers, losingAnswers] = partition( + answers.filter((a) => (showAllAnswers ? true : totalBets[a.id] > 0)), + (answer) => + answer.id === resolution || (resolutions && resolutions[answer.id]) ) - const [visibleAnswers, invisibleAnswers] = partition( - sortBy(notWinningAnswers, (a) => -getOutcomeProbability(contract, a.id)), - (a) => showAllAnswers || totalBets[a.id] > 0 + const sortedAnswers = [ + ...sortBy(winningAnswers, (answer) => + resolutions ? -1 * resolutions[answer.id] : 0 + ), + ...sortBy( + resolution ? [] : losingAnswers, + (answer) => -1 * getDpmOutcomeProbability(contract.totalShares, answer.id) + ), + ] + + const answerItems = sortBy( + losingAnswers.length > 0 ? losingAnswers : sortedAnswers, + (answer) => -getOutcomeProbability(contract, answer.id) ) const user = useUser() @@ -94,13 +107,13 @@ export function AnswersPanel(props: { return ( <Col className="gap-3"> {(resolveOption || resolution) && - sortBy(winningAnswers, (a) => -(resolutions?.[a.id] ?? 0)).map((a) => ( + sortedAnswers.map((answer) => ( <AnswerItem - key={a.id} - answer={a} + key={answer.id} + answer={answer} contract={contract} showChoice={showChoice} - chosenProb={chosenAnswers[a.id]} + chosenProb={chosenAnswers[answer.id]} totalChosenProb={chosenTotal} onChoose={onChoose} onDeselect={onDeselect} @@ -114,10 +127,10 @@ export function AnswersPanel(props: { tradingAllowed(contract) ? '' : '-mb-6' )} > - {visibleAnswers.map((a) => ( - <OpenAnswer key={a.id} answer={a} contract={contract} /> + {answerItems.map((item) => ( + <OpenAnswer key={item.id} answer={item} contract={contract} /> ))} - {invisibleAnswers.length > 0 && !showAllAnswers && ( + {hasZeroBetAnswers && !showAllAnswers && ( <Button className="self-end" color="gray-white" @@ -130,7 +143,7 @@ export function AnswersPanel(props: { </Col> )} - {answers.length === 0 && ( + {answers.length <= 1 && ( <div className="pb-4 text-gray-500">No answers yet...</div> )} From bf92c4fb0680a1bd9595d4ba4a614d4e187f348d Mon Sep 17 00:00:00 2001 From: Ian Philips <iansphilips@gmail.com> Date: Mon, 26 Sep 2022 11:28:54 -0400 Subject: [PATCH 21/30] Fix 500 on non-existant group page --- web/pages/group/[...slugs]/index.tsx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/web/pages/group/[...slugs]/index.tsx b/web/pages/group/[...slugs]/index.tsx index bed244eb..a23ce602 100644 --- a/web/pages/group/[...slugs]/index.tsx +++ b/web/pages/group/[...slugs]/index.tsx @@ -122,7 +122,7 @@ const groupSubpages = [ export default function GroupPage(props: { group: Group | null memberIds: string[] - creator: User + creator: User | null topTraders: { user: User; score: number }[] topCreators: { user: User; score: number }[] messages: GroupComment[] @@ -163,11 +163,11 @@ export default function GroupPage(props: { const memberIds = useMemberIds(group?.id ?? null) ?? props.memberIds useSaveReferral(user, { - defaultReferrerUsername: creator.username, + defaultReferrerUsername: creator?.username, groupId: group?.id, }) - if (group === null || !groupSubpages.includes(page) || slugs[2]) { + if (group === null || !groupSubpages.includes(page) || slugs[2] || !creator) { return <Custom404 /> } const isCreator = user && group && user.id === group.creatorId From d9292f7a95b8c209c5538976353697ca6e73a68f Mon Sep 17 00:00:00 2001 From: Ian Philips <iansphilips@gmail.com> Date: Mon, 26 Sep 2022 11:30:41 -0400 Subject: [PATCH 22/30] Switch order of my groups and all tabs --- web/pages/groups.tsx | 52 ++++++++++++++++++++++---------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/web/pages/groups.tsx b/web/pages/groups.tsx index 49d99d18..d5c73913 100644 --- a/web/pages/groups.tsx +++ b/web/pages/groups.tsx @@ -102,6 +102,32 @@ export default function Groups(props: { className="mb-4" currentPageForAnalytics={'groups'} tabs={[ + { + title: 'All', + content: ( + <Col> + <input + type="text" + onChange={(e) => debouncedQuery(e.target.value)} + placeholder="Search groups" + value={query} + className="input input-bordered mb-4 w-full" + /> + + <div className="flex flex-wrap justify-center gap-4"> + {matchesOrderedByMostContractAndMembers.map((group) => ( + <GroupCard + key={group.id} + group={group} + creator={creatorsDict[group.creatorId]} + user={user} + isMember={memberGroupIds.includes(group.id)} + /> + ))} + </div> + </Col> + ), + }, ...(user ? [ { @@ -136,32 +162,6 @@ export default function Groups(props: { }, ] : []), - { - title: 'All', - content: ( - <Col> - <input - type="text" - onChange={(e) => debouncedQuery(e.target.value)} - placeholder="Search groups" - value={query} - className="input input-bordered mb-4 w-full" - /> - - <div className="flex flex-wrap justify-center gap-4"> - {matchesOrderedByMostContractAndMembers.map((group) => ( - <GroupCard - key={group.id} - group={group} - creator={creatorsDict[group.creatorId]} - user={user} - isMember={memberGroupIds.includes(group.id)} - /> - ))} - </div> - </Col> - ), - }, ]} /> </Col> From cc3b44891bc1e4a6abfcc215850af43bce0d0f17 Mon Sep 17 00:00:00 2001 From: Ian Philips <iansphilips@gmail.com> Date: Mon, 26 Sep 2022 15:56:47 -0400 Subject: [PATCH 23/30] Add user to market followers in create answer --- functions/src/create-answer.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/functions/src/create-answer.ts b/functions/src/create-answer.ts index cc05d817..911f3b8c 100644 --- a/functions/src/create-answer.ts +++ b/functions/src/create-answer.ts @@ -7,6 +7,7 @@ import { getNewMultiBetInfo } from '../../common/new-bet' import { Answer, MAX_ANSWER_LENGTH } from '../../common/answer' import { getValues } from './utils' import { APIError, newEndpoint, validate } from './api' +import { addUserToContractFollowers } from './follow-market' const bodySchema = z.object({ contractId: z.string().max(MAX_ANSWER_LENGTH), @@ -96,6 +97,8 @@ export const createanswer = newEndpoint(opts, async (req, auth) => { return answer }) + await addUserToContractFollowers(contractId, auth.uid) + return answer }) From a10e4c115e3c16ce9490f6bde3d95083904429a0 Mon Sep 17 00:00:00 2001 From: Ian Philips <iansphilips@gmail.com> Date: Mon, 26 Sep 2022 15:57:21 -0400 Subject: [PATCH 24/30] Fix dpm MULTI resolution payouts bug --- common/payouts-dpm.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/payouts-dpm.ts b/common/payouts-dpm.ts index bf6f5ebc..48850dca 100644 --- a/common/payouts-dpm.ts +++ b/common/payouts-dpm.ts @@ -168,7 +168,7 @@ export const getPayoutsMultiOutcome = ( const winnings = (shares / sharesByOutcome[outcome]) * prob * poolTotal const profit = winnings - amount - const payout = amount + (1 - DPM_FEES) * Math.max(0, profit) + const payout = amount + (1 - DPM_FEES) * profit return { userId, profit, payout } }) From 94ffac287e141c949a262fb4782a052ff5e931be Mon Sep 17 00:00:00 2001 From: Ian Philips <iansphilips@gmail.com> Date: Mon, 26 Sep 2022 15:57:38 -0400 Subject: [PATCH 25/30] Payout resolution notifications styling --- web/pages/notifications.tsx | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/web/pages/notifications.tsx b/web/pages/notifications.tsx index 907157f9..4f9700dd 100644 --- a/web/pages/notifications.tsx +++ b/web/pages/notifications.tsx @@ -971,6 +971,8 @@ function ContractResolvedNotification(props: { const { sourceText, data } = notification const { userInvestment, userPayout } = (data as ContractResolutionData) ?? {} const subtitle = 'resolved the market' + const profitable = userPayout >= userInvestment + const ROI = (userPayout - userInvestment) / userInvestment const resolutionDescription = () => { if (!sourceText) return <div /> @@ -1002,23 +1004,21 @@ function ContractResolvedNotification(props: { const description = userInvestment && userPayout !== undefined ? ( - <Row className={'gap-1 '}> - Resolved: {resolutionDescription()} - Invested: + <> + Resolved: {resolutionDescription()} Invested: <span className={'text-primary'}>{formatMoney(userInvestment)} </span> Payout: <span className={clsx( - userPayout > 0 ? 'text-primary' : 'text-red-500', - 'truncate' + profitable ? 'text-primary' : 'text-red-500', + 'truncate text-ellipsis' )} > {formatMoney(userPayout)} - {` (${userPayout > 0 ? '+' : ''}${Math.round( - ((userPayout - userInvestment) / userInvestment) * 100 - )}%)`} + {userPayout > 0 && + ` (${profitable ? '+' : ''}${Math.round(ROI * 100)}%)`} </span> - </Row> + </> ) : ( <span>Resolved {resolutionDescription()}</span> ) @@ -1038,9 +1038,7 @@ function ContractResolvedNotification(props: { highlighted={highlighted} subtitle={subtitle} > - <Row> - <span>{description}</span> - </Row> + <Row className={'line-clamp-2 space-x-1'}>{description}</Row> </NotificationFrame> ) } From 90eaf83775dbe20dca26ecfd3bced7b7769420cd Mon Sep 17 00:00:00 2001 From: James Grugett <jahooma@gmail.com> Date: Mon, 26 Sep 2022 17:04:08 -0400 Subject: [PATCH 26/30] Redirect from '/home' to '/' if not logged in --- web/pages/home/index.tsx | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/web/pages/home/index.tsx b/web/pages/home/index.tsx index fda80c50..b42b37bb 100644 --- a/web/pages/home/index.tsx +++ b/web/pages/home/index.tsx @@ -55,6 +55,13 @@ export default function Home() { useSaveReferral() usePrefetch(user?.id) + useEffect(() => { + if (user === null) { + // Go to landing page if not logged in. + Router.push('/') + } + }) + const groups = useMemberGroupsSubscription(user) const { sections } = getHomeItems(groups ?? [], user?.homeSections ?? []) From 2ef025a151cc81293153551d0f56e35371c57c14 Mon Sep 17 00:00:00 2001 From: James Grugett <jahooma@gmail.com> Date: Mon, 26 Sep 2022 17:43:27 -0400 Subject: [PATCH 27/30] Only set daily score on contracts that are at least day old --- functions/src/score-contracts.ts | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/functions/src/score-contracts.ts b/functions/src/score-contracts.ts index 52ef39d4..497a4ba0 100644 --- a/functions/src/score-contracts.ts +++ b/functions/src/score-contracts.ts @@ -5,6 +5,7 @@ import { Bet } from '../../common/bet' import { Contract } from '../../common/contract' import { log } from './utils' import { removeUndefinedProps } from '../../common/util/object' +import { DAY_MS, HOUR_MS } from '../../common/util/time' export const scoreContracts = functions .runWith({ memory: '4GB', timeoutSeconds: 540 }) @@ -16,11 +17,12 @@ const firestore = admin.firestore() async function scoreContractsInternal() { const now = Date.now() - const lastHour = now - 60 * 60 * 1000 - const last3Days = now - 1000 * 60 * 60 * 24 * 3 + const hourAgo = now - HOUR_MS + const dayAgo = now - DAY_MS + const threeDaysAgo = now - DAY_MS * 3 const activeContractsSnap = await firestore .collection('contracts') - .where('lastUpdatedTime', '>', lastHour) + .where('lastUpdatedTime', '>', hourAgo) .get() const activeContracts = activeContractsSnap.docs.map( (doc) => doc.data() as Contract @@ -41,15 +43,21 @@ async function scoreContractsInternal() { for (const contract of contracts) { const bets = await firestore .collection(`contracts/${contract.id}/bets`) - .where('createdTime', '>', last3Days) + .where('createdTime', '>', threeDaysAgo) .get() const bettors = bets.docs .map((doc) => doc.data() as Bet) .map((bet) => bet.userId) const popularityScore = uniq(bettors).length + const wasCreatedToday = contract.createdTime > dayAgo + let dailyScore: number | undefined - if (contract.outcomeType === 'BINARY' && contract.mechanism === 'cpmm-1') { + if ( + contract.outcomeType === 'BINARY' && + contract.mechanism === 'cpmm-1' && + !wasCreatedToday + ) { const percentChange = Math.abs(contract.probChanges.day) dailyScore = popularityScore * percentChange } From df316fc4dabc9ae837eb0eb97d0ded8da7679a1a Mon Sep 17 00:00:00 2001 From: Ian Philips <iansphilips@gmail.com> Date: Mon, 26 Sep 2022 17:49:06 -0400 Subject: [PATCH 28/30] Portfolio update emails (#928) * Stats computing correctly * Styles propagating - testing in prod now * Formatting html * Reset portfolio flag on mondays at 12am * Add profit, styling * More styling, less reports * Cleanup * Comments * comment * Try to send higher signal emails * Send emails to proper email address --- common/calculate-metrics.ts | 19 + common/user.ts | 1 + .../weekly-portfolio-update-no-movers.html | 411 ++++++++++++++ .../weekly-portfolio-update.html | 510 ++++++++++++++++++ functions/src/emails.ts | 95 +++- functions/src/index.ts | 1 + functions/src/reset-weekly-emails-flag.ts | 1 + functions/src/serve.ts | 2 + functions/src/test-scheduled-function.ts | 17 + functions/src/utils.ts | 4 + functions/src/weekly-portfolio-emails.ts | 280 ++++++++++ 11 files changed, 1316 insertions(+), 25 deletions(-) create mode 100644 functions/src/email-templates/weekly-portfolio-update-no-movers.html create mode 100644 functions/src/email-templates/weekly-portfolio-update.html create mode 100644 functions/src/test-scheduled-function.ts create mode 100644 functions/src/weekly-portfolio-emails.ts diff --git a/common/calculate-metrics.ts b/common/calculate-metrics.ts index b27ac977..7c2153c1 100644 --- a/common/calculate-metrics.ts +++ b/common/calculate-metrics.ts @@ -21,6 +21,25 @@ const computeInvestmentValue = ( }) } +export const computeInvestmentValueCustomProb = ( + bets: Bet[], + contract: Contract, + p: number +) => { + return sumBy(bets, (bet) => { + if (!contract || contract.isResolved) return 0 + if (bet.sale || bet.isSold) return 0 + const { outcome, shares } = bet + + const betP = outcome === 'YES' ? p : 1 - p + + const payout = betP * shares + const value = payout - (bet.loanAmount ?? 0) + if (isNaN(value)) return 0 + return value + }) +} + const computeTotalPool = (userContracts: Contract[], startTime = 0) => { const periodFilteredContracts = userContracts.filter( (contract) => contract.createdTime >= startTime diff --git a/common/user.ts b/common/user.ts index 0372d99b..b1365929 100644 --- a/common/user.ts +++ b/common/user.ts @@ -57,6 +57,7 @@ export type PrivateUser = { email?: string weeklyTrendingEmailSent?: boolean + weeklyPortfolioUpdateEmailSent?: boolean manaBonusEmailSent?: boolean initialDeviceToken?: string initialIpAddress?: string diff --git a/functions/src/email-templates/weekly-portfolio-update-no-movers.html b/functions/src/email-templates/weekly-portfolio-update-no-movers.html new file mode 100644 index 00000000..15303992 --- /dev/null +++ b/functions/src/email-templates/weekly-portfolio-update-no-movers.html @@ -0,0 +1,411 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml" + xmlns:o="urn:schemas-microsoft-com:office:office"> + +<head> + <title>Weekly Portfolio Update on Manifold + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ + +
+ + + + + + + + + + + +
+ + + + + + + +
+ + + + banner logo + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + +
+
+

+ Hi {{name}},

+
+
+
+

+ + We ran the numbers and here's how you did this past week! + +

+
+
+ Profit +
+

+ {{profit}} +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ 🔥 Prediction streak + + {{prediction_streak}} +
+ 💸 Tips received + + {{tips_received}} +
+ 📈 Markets traded + + {{markets_traded}} +
+ ❓ Markets created + + {{markets_created}} +
+ 🥳 Traders attracted + + {{unique_bettors}} +
+ +
+
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + + +
+ +
+ + + + + + +
+ + + + + + + + + +
+
+

+ This e-mail has been sent to + {{name}}, + click here to unsubscribe from this type of notification. +

+
+
+
+
+ +
+
+ +
+
\ No newline at end of file diff --git a/functions/src/email-templates/weekly-portfolio-update.html b/functions/src/email-templates/weekly-portfolio-update.html new file mode 100644 index 00000000..fd99837f --- /dev/null +++ b/functions/src/email-templates/weekly-portfolio-update.html @@ -0,0 +1,510 @@ + + + + + Weekly Portfolio Update on Manifold + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + +
+ + +
+ + + + + + + + + + + +
+ + + + + + + +
+ + + + banner logo + + + +
+ +
+ +
+ + +
+ +
+ +
+ + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+

+ Hi {{name}},

+
+
+
+

+ + We ran the numbers and here's how you did this past week! + +

+
+
+ Profit +
+

+ {{profit}} +

+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+ 🔥 Prediction streak + + {{prediction_streak}} +
+ 💸 Tips received + + {{tips_received}} +
+ 📈 Markets traded + + {{markets_traded}} +
+ ❓ Markets created + + {{markets_created}} +
+ 🥳 Traders attracted + + {{unique_bettors}} +
+ +
+
+

+ + And here's some of the biggest changes in your portfolio: + +

+
+
+ + + + + + + + + + + + + + + + + + +
+ + {{question1Title}} + + + +

+ {{question1Prob}} + +

+ {{question1Change}} + +

+

+
+ + {{question2Title}} + + + +

+ {{question2Prob}} + +

+ {{question2Change}} + +

+

+
+ + {{question3Title}} + + + +

+ {{question3Prob}} + +

+ {{question3Change}} + +

+

+
+ + {{question4Title}} + + + +

+ {{question4Prob}} + +

+ {{question4Change}} + +

+

+
+ +
+
+
+
+ + +
+ + + + + + +
+ + +
+ + + + + + +
+ +
+ + + + + + +
+ + + + + + + + + +
+
+

+ This e-mail has been sent to + {{name}}, + click here to unsubscribe from this type of notification. +

+
+
+
+
+ +
+
+ +
+
diff --git a/functions/src/emails.ts b/functions/src/emails.ts index 98309ebe..dd91789a 100644 --- a/functions/src/emails.ts +++ b/functions/src/emails.ts @@ -12,14 +12,15 @@ import { getValueFromBucket } from '../../common/calculate-dpm' import { formatNumericProbability } from '../../common/pseudo-numeric' import { sendTemplateEmail, sendTextEmail } from './send-email' -import { getUser } from './utils' +import { contractUrl, getUser } from './utils' import { buildCardUrl, getOpenGraphProps } from '../../common/contract-details' import { notification_reason_types } from '../../common/notification' import { Dictionary } from 'lodash' +import { getNotificationDestinationsForUser } from '../../common/user-notification-preferences' import { - getNotificationDestinationsForUser, - notification_preference, -} from '../../common/user-notification-preferences' + PerContractInvestmentsData, + OverallPerformanceData, +} from 'functions/src/weekly-portfolio-emails' export const sendMarketResolutionEmail = async ( reason: notification_reason_types, @@ -152,9 +153,10 @@ export const sendWelcomeEmail = async ( const { name } = user const firstName = name.split(' ')[0] - const unsubscribeUrl = `${DOMAIN}/notifications?tab=settings§ion=${ - 'onboarding_flow' as notification_preference - }` + const { unsubscribeUrl } = getNotificationDestinationsForUser( + privateUser, + 'onboarding_flow' + ) return await sendTemplateEmail( privateUser.email, @@ -220,9 +222,11 @@ export const sendOneWeekBonusEmail = async ( const { name } = user const firstName = name.split(' ')[0] - const unsubscribeUrl = `${DOMAIN}/notifications?tab=settings§ion=${ - 'onboarding_flow' as notification_preference - }` + const { unsubscribeUrl } = getNotificationDestinationsForUser( + privateUser, + 'onboarding_flow' + ) + return await sendTemplateEmail( privateUser.email, 'Manifold Markets one week anniversary gift', @@ -252,10 +256,10 @@ export const sendCreatorGuideEmail = async ( const { name } = user const firstName = name.split(' ')[0] - - const unsubscribeUrl = `${DOMAIN}/notifications?tab=settings§ion=${ - 'onboarding_flow' as notification_preference - }` + const { unsubscribeUrl } = getNotificationDestinationsForUser( + privateUser, + 'onboarding_flow' + ) return await sendTemplateEmail( privateUser.email, 'Create your own prediction market', @@ -286,10 +290,10 @@ export const sendThankYouEmail = async ( const { name } = user const firstName = name.split(' ')[0] - - const unsubscribeUrl = `${DOMAIN}/notifications?tab=settings§ion=${ - 'thank_you_for_purchases' as notification_preference - }` + const { unsubscribeUrl } = getNotificationDestinationsForUser( + privateUser, + 'thank_you_for_purchases' + ) return await sendTemplateEmail( privateUser.email, @@ -469,9 +473,10 @@ export const sendInterestingMarketsEmail = async ( ) return - const unsubscribeUrl = `${DOMAIN}/notifications?tab=settings§ion=${ - 'trending_markets' as notification_preference - }` + const { unsubscribeUrl } = getNotificationDestinationsForUser( + privateUser, + 'trending_markets' + ) const { name } = user const firstName = name.split(' ')[0] @@ -507,10 +512,6 @@ export const sendInterestingMarketsEmail = async ( ) } -function contractUrl(contract: Contract) { - return `https://manifold.markets/${contract.creatorUsername}/${contract.slug}` -} - function imageSourceUrl(contract: Contract) { return buildCardUrl(getOpenGraphProps(contract)) } @@ -612,3 +613,47 @@ export const sendNewUniqueBettorsEmail = async ( } ) } + +export const sendWeeklyPortfolioUpdateEmail = async ( + user: User, + privateUser: PrivateUser, + investments: PerContractInvestmentsData[], + overallPerformance: OverallPerformanceData +) => { + if ( + !privateUser || + !privateUser.email || + !privateUser.notificationPreferences.profit_loss_updates.includes('email') + ) + return + + const { unsubscribeUrl } = getNotificationDestinationsForUser( + privateUser, + 'profit_loss_updates' + ) + + const { name } = user + const firstName = name.split(' ')[0] + const templateData: Record = { + name: firstName, + unsubscribeUrl, + ...overallPerformance, + } + investments.forEach((investment, i) => { + templateData[`question${i + 1}Title`] = investment.questionTitle + templateData[`question${i + 1}Url`] = investment.questionUrl + templateData[`question${i + 1}Prob`] = investment.questionProb + templateData[`question${i + 1}Change`] = investment.questionChange + templateData[`question${i + 1}ChangeStyle`] = investment.questionChangeStyle + }) + + await sendTemplateEmail( + privateUser.email, + // 'iansphilips@gmail.com', + `Here's your weekly portfolio update!`, + investments.length === 0 + ? 'portfolio-update-no-movers' + : 'portfolio-update', + templateData + ) +} diff --git a/functions/src/index.ts b/functions/src/index.ts index 2cb6f515..4844cea8 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -30,6 +30,7 @@ export * from './reset-betting-streaks' export * from './reset-weekly-emails-flag' export * from './on-update-contract-follow' export * from './on-update-like' +export * from './weekly-portfolio-emails' // v2 export * from './health' diff --git a/functions/src/reset-weekly-emails-flag.ts b/functions/src/reset-weekly-emails-flag.ts index 947e3e88..9a769498 100644 --- a/functions/src/reset-weekly-emails-flag.ts +++ b/functions/src/reset-weekly-emails-flag.ts @@ -17,6 +17,7 @@ export const resetWeeklyEmailsFlag = functions privateUsers.map(async (user) => { return firestore.collection('private-users').doc(user.id).update({ weeklyTrendingEmailSent: false, + weeklyPortfolioEmailSent: false, }) }) ) diff --git a/functions/src/serve.ts b/functions/src/serve.ts index 6d062d40..99ac6281 100644 --- a/functions/src/serve.ts +++ b/functions/src/serve.ts @@ -28,6 +28,7 @@ import { stripewebhook, createcheckoutsession } from './stripe' import { getcurrentuser } from './get-current-user' import { createpost } from './create-post' import { savetwitchcredentials } from './save-twitch-credentials' +import { testscheduledfunction } from './test-scheduled-function' type Middleware = (req: Request, res: Response, next: NextFunction) => void const app = express() @@ -69,6 +70,7 @@ addJsonEndpointRoute('/getcurrentuser', getcurrentuser) addJsonEndpointRoute('/savetwitchcredentials', savetwitchcredentials) addEndpointRoute('/stripewebhook', stripewebhook, express.raw()) addEndpointRoute('/createpost', createpost) +addEndpointRoute('/testscheduledfunction', testscheduledfunction) app.listen(PORT) console.log(`Serving functions on port ${PORT}.`) diff --git a/functions/src/test-scheduled-function.ts b/functions/src/test-scheduled-function.ts new file mode 100644 index 00000000..41aa9fe9 --- /dev/null +++ b/functions/src/test-scheduled-function.ts @@ -0,0 +1,17 @@ +import { APIError, newEndpoint } from './api' +import { sendPortfolioUpdateEmailsToAllUsers } from './weekly-portfolio-emails' +import { isProd } from './utils' + +// Function for testing scheduled functions locally +export const testscheduledfunction = newEndpoint( + { method: 'GET', memory: '4GiB' }, + async (_req) => { + if (isProd()) + throw new APIError(400, 'This function is only available in dev mode') + + // Replace your function here + await sendPortfolioUpdateEmailsToAllUsers() + + return { success: true } + } +) diff --git a/functions/src/utils.ts b/functions/src/utils.ts index 6bb8349a..efc22e53 100644 --- a/functions/src/utils.ts +++ b/functions/src/utils.ts @@ -170,3 +170,7 @@ export const chargeUser = ( export const getContractPath = (contract: Contract) => { return `/${contract.creatorUsername}/${contract.slug}` } + +export function contractUrl(contract: Contract) { + return `https://manifold.markets/${contract.creatorUsername}/${contract.slug}` +} diff --git a/functions/src/weekly-portfolio-emails.ts b/functions/src/weekly-portfolio-emails.ts new file mode 100644 index 00000000..dcbb68dd --- /dev/null +++ b/functions/src/weekly-portfolio-emails.ts @@ -0,0 +1,280 @@ +import * as functions from 'firebase-functions' +import * as admin from 'firebase-admin' + +import { Contract, CPMMContract } from '../../common/contract' +import { + getAllPrivateUsers, + getPrivateUser, + getUser, + getValue, + getValues, + isProd, + log, +} from './utils' +import { filterDefined } from '../../common/util/array' +import { DAY_MS } from '../../common/util/time' +import { partition, sortBy, sum, uniq } from 'lodash' +import { Bet } from '../../common/bet' +import { computeInvestmentValueCustomProb } from '../../common/calculate-metrics' +import { sendWeeklyPortfolioUpdateEmail } from './emails' +import { contractUrl } from './utils' +import { Txn } from '../../common/txn' +import { formatMoney } from '../../common/util/format' + +// TODO: reset weeklyPortfolioUpdateEmailSent to false for all users at the start of each week +export const weeklyPortfolioUpdateEmails = functions + .runWith({ secrets: ['MAILGUN_KEY'], memory: '4GB' }) + // every minute on Friday for an hour at 12pm PT (UTC -07:00) + .pubsub.schedule('* 19 * * 5') + .timeZone('Etc/UTC') + .onRun(async () => { + await sendPortfolioUpdateEmailsToAllUsers() + }) + +const firestore = admin.firestore() + +export async function sendPortfolioUpdateEmailsToAllUsers() { + const privateUsers = isProd() + ? // ian & stephen's ids + // ? filterDefined([ + // await getPrivateUser('AJwLWoo3xue32XIiAVrL5SyR1WB2'), + // await getPrivateUser('tlmGNz9kjXc2EteizMORes4qvWl2'), + // ]) + await getAllPrivateUsers() + : filterDefined([await getPrivateUser('6hHpzvRG0pMq8PNJs7RZj2qlZGn2')]) + // get all users that haven't unsubscribed from weekly emails + const privateUsersToSendEmailsTo = privateUsers + .filter((user) => { + return isProd() + ? user.notificationPreferences.profit_loss_updates.includes('email') && + !user.weeklyPortfolioUpdateEmailSent + : true + }) + // Send emails in batches + .slice(0, 200) + log( + 'Sending weekly portfolio emails to', + privateUsersToSendEmailsTo.length, + 'users' + ) + + const usersBets: { [userId: string]: Bet[] } = {} + // get all bets made by each user + await Promise.all( + privateUsersToSendEmailsTo.map(async (user) => { + return getValues( + firestore.collectionGroup('bets').where('userId', '==', user.id) + ).then((bets) => { + usersBets[user.id] = bets + }) + }) + ) + + const usersToContractsCreated: { [userId: string]: Contract[] } = {} + // Get all contracts created by each user + await Promise.all( + privateUsersToSendEmailsTo.map(async (user) => { + return getValues( + firestore + .collection('contracts') + .where('creatorId', '==', user.id) + .where('createdTime', '>', Date.now() - 7 * DAY_MS) + ).then((contracts) => { + usersToContractsCreated[user.id] = contracts + }) + }) + ) + + // Get all txns the users received over the past week + const usersToTxnsReceived: { [userId: string]: Txn[] } = {} + await Promise.all( + privateUsersToSendEmailsTo.map(async (user) => { + return getValues( + firestore + .collection(`txns`) + .where('toId', '==', user.id) + .where('createdTime', '>', Date.now() - 7 * DAY_MS) + ).then((txn) => { + usersToTxnsReceived[user.id] = txn + }) + }) + ) + + // Get a flat map of all the bets that users made to get the contracts they bet on + const contractsUsersBetOn = filterDefined( + await Promise.all( + uniq( + Object.values(usersBets).flatMap((bets) => + bets.map((bet) => bet.contractId) + ) + ).map((contractId) => + getValue(firestore.collection('contracts').doc(contractId)) + ) + ) + ) + log('Found', contractsUsersBetOn.length, 'contracts') + let count = 0 + await Promise.all( + privateUsersToSendEmailsTo.map(async (privateUser) => { + const user = await getUser(privateUser.id) + if (!user) return + const userBets = usersBets[privateUser.id] as Bet[] + const contractsUserBetOn = contractsUsersBetOn.filter((contract) => + userBets.some((bet) => bet.contractId === contract.id) + ) + const contractsBetOnInLastWeek = uniq( + userBets + .filter((bet) => bet.createdTime > Date.now() - 7 * DAY_MS) + .map((bet) => bet.contractId) + ) + const totalTips = sum( + usersToTxnsReceived[privateUser.id] + .filter((txn) => txn.category === 'TIP') + .map((txn) => txn.amount) + ) + const greenBg = 'rgba(0,160,0,0.2)' + const redBg = 'rgba(160,0,0,0.2)' + const clearBg = 'rgba(255,255,255,0)' + const roundedProfit = + Math.round(user.profitCached.weekly) === 0 + ? 0 + : Math.floor(user.profitCached.weekly) + const performanceData = { + profit: formatMoney(user.profitCached.weekly), + profit_style: `background-color: ${ + roundedProfit > 0 ? greenBg : roundedProfit === 0 ? clearBg : redBg + }`, + markets_created: + usersToContractsCreated[privateUser.id].length.toString(), + tips_received: formatMoney(totalTips), + unique_bettors: usersToTxnsReceived[privateUser.id] + .filter((txn) => txn.category === 'UNIQUE_BETTOR_BONUS') + .length.toString(), + markets_traded: contractsBetOnInLastWeek.length.toString(), + prediction_streak: + (user.currentBettingStreak?.toString() ?? '0') + ' days', + // More options: bonuses, tips given, + } as OverallPerformanceData + + const investmentValueDifferences = sortBy( + filterDefined( + contractsUserBetOn.map((contract) => { + const cpmmContract = contract as CPMMContract + if (cpmmContract === undefined || cpmmContract.prob === undefined) + return + const bets = userBets.filter( + (bet) => bet.contractId === contract.id + ) + + const marketProbabilityAWeekAgo = + cpmmContract.prob - cpmmContract.probChanges.week + const currentMarketProbability = cpmmContract.resolutionProbability + ? cpmmContract.resolutionProbability + : cpmmContract.prob + const betsValueAWeekAgo = computeInvestmentValueCustomProb( + bets.filter((b) => b.createdTime < Date.now() - 7 * DAY_MS), + contract, + marketProbabilityAWeekAgo + ) + const currentBetsValue = computeInvestmentValueCustomProb( + bets, + contract, + currentMarketProbability + ) + const marketChange = + currentMarketProbability - marketProbabilityAWeekAgo + return { + currentValue: currentBetsValue, + pastValue: betsValueAWeekAgo, + difference: currentBetsValue - betsValueAWeekAgo, + contractSlug: contract.slug, + marketProbAWeekAgo: marketProbabilityAWeekAgo, + questionTitle: contract.question, + questionUrl: contractUrl(contract), + questionProb: cpmmContract.resolution + ? cpmmContract.resolution + : Math.round(cpmmContract.prob * 100) + '%', + questionChange: + (marketChange > 0 ? '+' : '') + + Math.round(marketChange * 100) + + '%', + questionChangeStyle: `color: ${ + currentMarketProbability > marketProbabilityAWeekAgo + ? 'rgba(0,160,0,1)' + : '#a80000' + };`, + } as PerContractInvestmentsData + }) + ), + (differences) => Math.abs(differences.difference) + ).reverse() + + log( + 'Found', + investmentValueDifferences.length, + 'investment differences for user', + privateUser.id + ) + + const [winningInvestments, losingInvestments] = partition( + investmentValueDifferences.filter( + (diff) => + diff.pastValue > 0.01 && + Math.abs(diff.difference / diff.pastValue) > 0.01 // difference is greater than 1% + ), + (investmentsData: PerContractInvestmentsData) => { + return investmentsData.difference > 0 + } + ) + // pick 3 winning investments and 3 losing investments + const topInvestments = winningInvestments.slice(0, 2) + const worstInvestments = losingInvestments.slice(0, 2) + // if no bets in the last week ANd no market movers AND no markets created, don't send email + if ( + contractsBetOnInLastWeek.length === 0 && + topInvestments.length === 0 && + worstInvestments.length === 0 && + usersToContractsCreated[privateUser.id].length === 0 + ) { + log('No bets in last week, no market movers, no markets created') + await firestore.collection('private-users').doc(privateUser.id).update({ + weeklyPortfolioUpdateEmailSent: true, + }) + return + } + await sendWeeklyPortfolioUpdateEmail( + user, + privateUser, + topInvestments.concat(worstInvestments) as PerContractInvestmentsData[], + performanceData + ) + await firestore.collection('private-users').doc(privateUser.id).update({ + weeklyPortfolioUpdateEmailSent: true, + }) + log('Sent weekly portfolio update email to', privateUser.email) + count++ + log('sent out emails to user count:', count) + }) + ) +} + +export type PerContractInvestmentsData = { + questionTitle: string + questionUrl: string + questionProb: string + questionChange: string + questionChangeStyle: string + currentValue: number + pastValue: number + difference: number +} + +export type OverallPerformanceData = { + profit: string + prediction_streak: string + markets_traded: string + profit_style: string + tips_received: string + markets_created: string + unique_bettors: string +} From f7bf42d2e0cdcf0ab9f6d2bb4681d8660ccaaf45 Mon Sep 17 00:00:00 2001 From: Ian Philips Date: Mon, 26 Sep 2022 17:54:48 -0400 Subject: [PATCH 29/30] Rename & correct spelling --- functions/src/index.ts | 2 +- ...set-weekly-emails-flag.ts => reset-weekly-emails-flags.ts} | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) rename functions/src/{reset-weekly-emails-flag.ts => reset-weekly-emails-flags.ts} (87%) diff --git a/functions/src/index.ts b/functions/src/index.ts index 4844cea8..9a8ec232 100644 --- a/functions/src/index.ts +++ b/functions/src/index.ts @@ -27,7 +27,7 @@ export * from './on-delete-group' export * from './score-contracts' export * from './weekly-markets-emails' export * from './reset-betting-streaks' -export * from './reset-weekly-emails-flag' +export * from './reset-weekly-emails-flags' export * from './on-update-contract-follow' export * from './on-update-like' export * from './weekly-portfolio-emails' diff --git a/functions/src/reset-weekly-emails-flag.ts b/functions/src/reset-weekly-emails-flags.ts similarity index 87% rename from functions/src/reset-weekly-emails-flag.ts rename to functions/src/reset-weekly-emails-flags.ts index 9a769498..1b2109a1 100644 --- a/functions/src/reset-weekly-emails-flag.ts +++ b/functions/src/reset-weekly-emails-flags.ts @@ -2,7 +2,7 @@ import * as functions from 'firebase-functions' import * as admin from 'firebase-admin' import { getAllPrivateUsers } from './utils' -export const resetWeeklyEmailsFlag = functions +export const resetWeeklyEmailsFlags = functions .runWith({ timeoutSeconds: 300, memory: '4GB', @@ -17,7 +17,7 @@ export const resetWeeklyEmailsFlag = functions privateUsers.map(async (user) => { return firestore.collection('private-users').doc(user.id).update({ weeklyTrendingEmailSent: false, - weeklyPortfolioEmailSent: false, + weeklyPortfolioUpdateEmailSent: false, }) }) ) From 3ed3b6fb4281f05f21a60aa1709cc446e7d4198c Mon Sep 17 00:00:00 2001 From: Ian Philips Date: Mon, 26 Sep 2022 18:05:50 -0400 Subject: [PATCH 30/30] Set email sent flag if skipped over --- functions/src/weekly-markets-emails.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/functions/src/weekly-markets-emails.ts b/functions/src/weekly-markets-emails.ts index bec5949c..7c6f21a4 100644 --- a/functions/src/weekly-markets-emails.ts +++ b/functions/src/weekly-markets-emails.ts @@ -46,12 +46,14 @@ async function sendTrendingMarketsEmailsToAllUsers() { ? await getAllPrivateUsers() : filterDefined([await getPrivateUser('6hHpzvRG0pMq8PNJs7RZj2qlZGn2')]) // get all users that haven't unsubscribed from weekly emails - const privateUsersToSendEmailsTo = privateUsers.filter((user) => { - return ( - user.notificationPreferences.trending_markets.includes('email') && - !user.weeklyTrendingEmailSent - ) - }) + const privateUsersToSendEmailsTo = privateUsers + .filter((user) => { + return ( + user.notificationPreferences.trending_markets.includes('email') && + !user.weeklyTrendingEmailSent + ) + }) + .slice(150) // Send the emails out in batches log( 'Sending weekly trending emails to', privateUsersToSendEmailsTo.length, @@ -74,6 +76,7 @@ async function sendTrendingMarketsEmailsToAllUsers() { trendingContracts.map((c) => c.question).join('\n ') ) + // TODO: convert to Promise.all for (const privateUser of privateUsersToSendEmailsTo) { if (!privateUser.email) { log(`No email for ${privateUser.username}`) @@ -84,6 +87,9 @@ async function sendTrendingMarketsEmailsToAllUsers() { }) if (contractsAvailableToSend.length < numContractsToSend) { log('not enough new, unbet-on contracts to send to user', privateUser.id) + await firestore.collection('private-users').doc(privateUser.id).update({ + weeklyTrendingEmailSent: true, + }) continue } // choose random subset of contracts to send to user