@@ -149,7 +151,7 @@ export function FeedQuestion(props: {
href={
props.contractPath ? props.contractPath : contractPath(contract)
}
- onClick={() => trackClick(contract.id)}
+ onClick={() => user && trackClick(user.id, contract.id)}
className="text-lg text-indigo-700 sm:text-xl"
>
{question}
diff --git a/web/hooks/use-algo-feed.ts b/web/hooks/use-algo-feed.ts
index fde50e80..e195936f 100644
--- a/web/hooks/use-algo-feed.ts
+++ b/web/hooks/use-algo-feed.ts
@@ -25,7 +25,7 @@ export const useAlgoFeed = (
getDefaultFeed().then((feed) => setAllFeed(feed))
} else setAllFeed(feed)
- trackLatency('feed', getTime())
+ trackLatency(user.id, 'feed', getTime())
console.log('"all" feed load time', getTime())
})
diff --git a/web/hooks/use-seen-contracts.ts b/web/hooks/use-seen-contracts.ts
index 501e7b0c..d21ca84c 100644
--- a/web/hooks/use-seen-contracts.ts
+++ b/web/hooks/use-seen-contracts.ts
@@ -3,6 +3,7 @@ import { useEffect, useState } from 'react'
import { Contract } from 'common/contract'
import { trackView } from 'web/lib/firebase/tracking'
import { useIsVisible } from './use-is-visible'
+import { useUser } from './use-user'
export const useSeenContracts = () => {
const [seenContracts, setSeenContracts] = useState<{
@@ -21,18 +22,19 @@ export const useSaveSeenContract = (
contract: Contract
) => {
const isVisible = useIsVisible(elem)
+ const user = useUser()
useEffect(() => {
- if (isVisible) {
+ if (isVisible && user) {
const newSeenContracts = {
...getSeenContracts(),
[contract.id]: Date.now(),
}
localStorage.setItem(key, JSON.stringify(newSeenContracts))
- trackView(contract.id)
+ trackView(user.id, contract.id)
}
- }, [isVisible, contract])
+ }, [isVisible, user, contract])
}
const key = 'feed-seen-contracts'
diff --git a/web/hooks/use-user.ts b/web/hooks/use-user.ts
index e04a69ca..4c492d6c 100644
--- a/web/hooks/use-user.ts
+++ b/web/hooks/use-user.ts
@@ -1,4 +1,4 @@
-import { useEffect, useState } from 'react'
+import { useContext, useEffect, useState } from 'react'
import { useFirestoreDocumentData } from '@react-query-firebase/firestore'
import { QueryClient } from 'react-query'
@@ -6,32 +6,14 @@ import { doc, DocumentData } from 'firebase/firestore'
import { PrivateUser } from 'common/user'
import {
getUser,
- listenForLogin,
listenForPrivateUser,
- listenForUser,
User,
users,
} from 'web/lib/firebase/users'
-import { useStateCheckEquality } from './use-state-check-equality'
-import { identifyUser, setUserProperty } from 'web/lib/service/analytics'
+import { AuthContext } from 'web/components/auth-context'
export const useUser = () => {
- const [user, setUser] = useStateCheckEquality
(
- undefined
- )
-
- useEffect(() => listenForLogin(setUser), [setUser])
-
- useEffect(() => {
- if (user) {
- identifyUser(user.id)
- setUserProperty('username', user.username)
-
- return listenForUser(user.id, setUser)
- }
- }, [user, setUser])
-
- return user
+ return useContext(AuthContext)
}
export const usePrivateUser = (userId?: string) => {
diff --git a/web/lib/firebase/tracking.ts b/web/lib/firebase/tracking.ts
index f6ad3aa8..d1828e01 100644
--- a/web/lib/firebase/tracking.ts
+++ b/web/lib/firebase/tracking.ts
@@ -2,16 +2,9 @@ import { doc, collection, setDoc } from 'firebase/firestore'
import { db } from './init'
import { ClickEvent, LatencyEvent, View } from 'common/tracking'
-import { listenForLogin, User } from './users'
-let user: User | null = null
-if (typeof window !== 'undefined') {
- listenForLogin((u) => (user = u))
-}
-
-export async function trackView(contractId: string) {
- if (!user) return
- const ref = doc(collection(db, 'private-users', user.id, 'views'))
+export async function trackView(userId: string, contractId: string) {
+ const ref = doc(collection(db, 'private-users', userId, 'views'))
const view: View = {
contractId,
@@ -21,9 +14,8 @@ export async function trackView(contractId: string) {
return await setDoc(ref, view)
}
-export async function trackClick(contractId: string) {
- if (!user) return
- const ref = doc(collection(db, 'private-users', user.id, 'events'))
+export async function trackClick(userId: string, contractId: string) {
+ const ref = doc(collection(db, 'private-users', userId, 'events'))
const clickEvent: ClickEvent = {
type: 'click',
@@ -35,11 +27,11 @@ export async function trackClick(contractId: string) {
}
export async function trackLatency(
+ userId: string,
type: 'feed' | 'portfolio',
latency: number
) {
- if (!user) return
- const ref = doc(collection(db, 'private-users', user.id, 'latency'))
+ const ref = doc(collection(db, 'private-users', userId, 'latency'))
const latencyEvent: LatencyEvent = {
type,
diff --git a/web/lib/firebase/users.ts b/web/lib/firebase/users.ts
index 89852851..481f86de 100644
--- a/web/lib/firebase/users.ts
+++ b/web/lib/firebase/users.ts
@@ -15,15 +15,10 @@ import {
} from 'firebase/firestore'
import { getAuth } from 'firebase/auth'
import { ref, getStorage, uploadBytes, getDownloadURL } from 'firebase/storage'
-import {
- onIdTokenChanged,
- GoogleAuthProvider,
- signInWithPopup,
-} from 'firebase/auth'
+import { GoogleAuthProvider, signInWithPopup } from 'firebase/auth'
import { zip } from 'lodash'
import { app, db } from './init'
import { PortfolioMetrics, PrivateUser, User } from 'common/user'
-import { createUser } from './api'
import {
coll,
getValue,
@@ -37,13 +32,11 @@ import { safeLocalStorage } from '../util/local'
import { filterDefined } from 'common/util/array'
import { addUserToGroupViaId } from 'web/lib/firebase/groups'
import { removeUndefinedProps } from 'common/util/object'
-import { randomString } from 'common/util/random'
import dayjs from 'dayjs'
import utc from 'dayjs/plugin/utc'
dayjs.extend(utc)
import { track } from '@amplitude/analytics-browser'
-import { deleteAuthCookies, setAuthCookies } from './auth'
export const users = coll('users')
export const privateUsers = coll('private-users')
@@ -97,7 +90,6 @@ export function listenForPrivateUser(
return listenForValue(userRef, setPrivateUser)
}
-const CACHED_USER_KEY = 'CACHED_USER_KEY'
const CACHED_REFERRAL_USERNAME_KEY = 'CACHED_REFERRAL_KEY'
const CACHED_REFERRAL_CONTRACT_ID_KEY = 'CACHED_REFERRAL_CONTRACT_KEY'
const CACHED_REFERRAL_GROUP_ID_KEY = 'CACHED_REFERRAL_GROUP_KEY'
@@ -130,7 +122,7 @@ export function writeReferralInfo(
local?.setItem(CACHED_REFERRAL_CONTRACT_ID_KEY, contractId)
}
-async function setCachedReferralInfoForUser(user: User | null) {
+export async function setCachedReferralInfoForUser(user: User | null) {
if (!user || user.referredByUserId) return
// if the user wasn't created in the last minute, don't bother
const now = dayjs().utc()
@@ -181,46 +173,6 @@ async function setCachedReferralInfoForUser(user: User | null) {
local?.removeItem(CACHED_REFERRAL_CONTRACT_ID_KEY)
}
-// used to avoid weird race condition
-let createUserPromise: Promise | undefined = undefined
-
-export function listenForLogin(onUser: (user: User | null) => void) {
- const local = safeLocalStorage()
- const cachedUser = local?.getItem(CACHED_USER_KEY)
- onUser(cachedUser && JSON.parse(cachedUser))
-
- return onIdTokenChanged(auth, async (fbUser) => {
- if (fbUser) {
- let user: User | null = await getUser(fbUser.uid)
- if (!user) {
- if (createUserPromise == null) {
- const local = safeLocalStorage()
- let deviceToken = local?.getItem('device-token')
- if (!deviceToken) {
- deviceToken = randomString()
- local?.setItem('device-token', deviceToken)
- }
- createUserPromise = createUser({ deviceToken }).then((r) => r as User)
- }
- user = await createUserPromise
- }
- onUser(user)
-
- // Persist to local storage, to reduce login blink next time.
- // Note: Cap on localStorage size is ~5mb
- local?.setItem(CACHED_USER_KEY, JSON.stringify(user))
- setCachedReferralInfoForUser(user)
- setAuthCookies(await fbUser.getIdToken(), fbUser.refreshToken)
- } else {
- // User logged out; reset to null
- onUser(null)
- createUserPromise = undefined
- local?.removeItem(CACHED_USER_KEY)
- deleteAuthCookies()
- }
- })
-}
-
export async function firebaseLogin() {
const provider = new GoogleAuthProvider()
return signInWithPopup(auth, provider)
diff --git a/web/pages/_app.tsx b/web/pages/_app.tsx
index d081bc9a..52316eb0 100644
--- a/web/pages/_app.tsx
+++ b/web/pages/_app.tsx
@@ -5,6 +5,7 @@ import Head from 'next/head'
import Script from 'next/script'
import { usePreserveScroll } from 'web/hooks/use-preserve-scroll'
import { QueryClient, QueryClientProvider } from 'react-query'
+import { AuthProvider } from 'web/components/auth-context'
function firstLine(msg: string) {
return msg.replace(/\r?\n.*/s, '')
@@ -78,9 +79,11 @@ function MyApp({ Component, pageProps }: AppProps) {
/>
-
-
-
+
+
+
+
+
>
)
}
From 6603effd1bb691dceeb5213cdbaaf425c78cccb9 Mon Sep 17 00:00:00 2001
From: Austin Chen
Date: Thu, 21 Jul 2022 01:16:21 -0700
Subject: [PATCH 06/10] Use https for hotlinked image
Editing main from my phone, fingers crossed
---
web/public/mtg/index.html | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/web/public/mtg/index.html b/web/public/mtg/index.html
index 5fd31966..62849462 100644
--- a/web/public/mtg/index.html
+++ b/web/public/mtg/index.html
@@ -152,7 +152,7 @@
Options
From 96e9f749d24f717d7571cdbf820a2583d4738caa Mon Sep 17 00:00:00 2001
From: mantikoros
Date: Thu, 21 Jul 2022 12:45:47 -0500
Subject: [PATCH 07/10] track search categories
---
web/components/contract-search.tsx | 20 +++++++++++++-------
1 file changed, 13 insertions(+), 7 deletions(-)
diff --git a/web/components/contract-search.tsx b/web/components/contract-search.tsx
index 730b113f..8eb7df6e 100644
--- a/web/components/contract-search.tsx
+++ b/web/components/contract-search.tsx
@@ -22,7 +22,7 @@ import { Spacer } from './layout/spacer'
import { ENV, IS_PRIVATE_MANIFOLD } from 'common/envs/constants'
import { useUser } from 'web/hooks/use-user'
import { useFollows } from 'web/hooks/use-follows'
-import { trackCallback } from 'web/lib/service/analytics'
+import { track, trackCallback } from 'web/lib/service/analytics'
import ContractSearchFirestore from 'web/pages/contract-search-firestore'
import { useMemberGroups } from 'web/hooks/use-group'
import { Group, NEW_USER_GROUP_SLUGS } from 'common/group'
@@ -111,8 +111,14 @@ export function ContractSearch(props: {
querySortOptions?.defaultFilter ?? 'open'
)
const pillsEnabled = !additionalFilter
+
const [pillFilter, setPillFilter] = useState(undefined)
+ const selectFilter = (pill: string | undefined) => () => {
+ setPillFilter(pill)
+ track('select search category', { category: pill ?? 'all' })
+ }
+
const { filters, numericFilters } = useMemo(() => {
let filters = [
filter === 'open' ? 'isResolved:false' : '',
@@ -191,7 +197,7 @@ export function ContractSearch(props: {
className="!select !select-bordered"
value={filter}
onChange={(e) => setFilter(e.target.value as filter)}
- onBlur={trackCallback('select search filter')}
+ onBlur={trackCallback('select search filter', { filter })}
>
@@ -204,7 +210,7 @@ export function ContractSearch(props: {
classNames={{
select: '!select !select-bordered',
}}
- onBlur={trackCallback('select search sort')}
+ onBlur={trackCallback('select search sort', { sort })}
/>
)}
setPillFilter(undefined)}
+ onSelect={selectFilter(undefined)}
>
All
setPillFilter('personal')}
+ onSelect={selectFilter('personal')}
>
For you
@@ -237,7 +243,7 @@ export function ContractSearch(props: {
setPillFilter('your-bets')}
+ onSelect={selectFilter('your-bets')}
>
Your bets
@@ -247,7 +253,7 @@ export function ContractSearch(props: {
setPillFilter(slug)}
+ onSelect={selectFilter(slug)}
>
{name}
From 91bec9c9964056b5894cc709e14454cd5534f1df Mon Sep 17 00:00:00 2001
From: mantikoros <95266179+mantikoros@users.noreply.github.com>
Date: Thu, 21 Jul 2022 14:43:10 -0500
Subject: [PATCH 08/10] Referrals page (#676)
* Referrals page added to sidebar; useSaveReferral; InfoBox
* text color
* eslint
* migrate useUsers hook to react-query (#674)
* Remove bet button from free response comments
* Make answer replies more closely spaced together
* Host Ida and Alex's MTG Guesser game (#656)
* Copy over code from Mtg Guesser
* Run Prettier
* CSS Tweaks: Hover feedback, button positioning
* Hide all but counterspell & burn, for now
* Move to /mtg directory
* Fix prettierignore
* smaller jsons (#673)
limited burn to only red cards and also added limited json files to only have fields needed to play
* Add Ida's tweak to card position
Co-authored-by: marsteralex
* Adjust card positioning
* Make the select screen index.html
* Remove other guessing games
* Remove alternate versions; add Alex's email
* Remove unused jsons
* Small FR comments tweaks
* Spacing tweak
* Changing manalinks table UI (#665)
From table to card view
* Fix comment spacing on non-FR
* Move "Send M$" lower in sidebar More list.
* Move leaderboards up in mobile nav
* eslint
* prettier
Co-authored-by: Sinclair Chen
Co-authored-by: James Grugett
Co-authored-by: Austin Chen
Co-authored-by: marsteralex
Co-authored-by: ingawei <46611122+ingawei@users.noreply.github.com>
---
web/components/info-box.tsx | 30 +++++++++++++
web/components/nav/sidebar.tsx | 2 +
web/hooks/use-save-referral.ts | 27 +++++++++++
web/pages/[username]/[contractSlug].tsx | 17 +++----
web/pages/group/[...slugs]/index.tsx | 22 ++++-----
web/pages/home.tsx | 3 ++
web/pages/index.tsx | 4 ++
web/pages/referrals.tsx | 57 ++++++++++++++++++++++++
web/public/logo-flapping-with-money.gif | Bin 0 -> 293878 bytes
9 files changed, 137 insertions(+), 25 deletions(-)
create mode 100644 web/components/info-box.tsx
create mode 100644 web/hooks/use-save-referral.ts
create mode 100644 web/pages/referrals.tsx
create mode 100644 web/public/logo-flapping-with-money.gif
diff --git a/web/components/info-box.tsx b/web/components/info-box.tsx
new file mode 100644
index 00000000..34f65089
--- /dev/null
+++ b/web/components/info-box.tsx
@@ -0,0 +1,30 @@
+import clsx from 'clsx'
+import { InformationCircleIcon } from '@heroicons/react/solid'
+
+import { Linkify } from './linkify'
+
+export function InfoBox(props: {
+ title: string
+ text: string
+ className?: string
+}) {
+ const { title, text, className } = props
+ return (
+
+ )
+}
diff --git a/web/components/nav/sidebar.tsx b/web/components/nav/sidebar.tsx
index 9486a97b..b7117a20 100644
--- a/web/components/nav/sidebar.tsx
+++ b/web/components/nav/sidebar.tsx
@@ -63,6 +63,7 @@ function getMoreNavigation(user?: User | null) {
return [
{ name: 'Leaderboards', href: '/leaderboards' },
+ { name: 'Referrals', href: '/referrals' },
{ name: 'Charity', href: '/charity' },
{ name: 'Send M$', href: '/links' },
{ name: 'Discord', href: 'https://discord.gg/eHQBNBqXuh' },
@@ -114,6 +115,7 @@ function getMoreMobileNav() {
...(IS_PRIVATE_MANIFOLD
? []
: [
+ { name: 'Referrals', href: '/referrals' },
{ name: 'Charity', href: '/charity' },
{ name: 'Send M$', href: '/links' },
{ name: 'Discord', href: 'https://discord.gg/eHQBNBqXuh' },
diff --git a/web/hooks/use-save-referral.ts b/web/hooks/use-save-referral.ts
new file mode 100644
index 00000000..788268b0
--- /dev/null
+++ b/web/hooks/use-save-referral.ts
@@ -0,0 +1,27 @@
+import { useRouter } from 'next/router'
+import { useEffect } from 'react'
+
+import { User, writeReferralInfo } from 'web/lib/firebase/users'
+
+export const useSaveReferral = (
+ user?: User | null,
+ options?: {
+ defaultReferrer?: string
+ contractId?: string
+ groupId?: string
+ }
+) => {
+ const router = useRouter()
+
+ useEffect(() => {
+ const { referrer } = router.query as {
+ referrer?: string
+ }
+
+ const actualReferrer = referrer || options?.defaultReferrer
+
+ if (!user && router.isReady && actualReferrer) {
+ writeReferralInfo(actualReferrer, options?.contractId, options?.groupId)
+ }
+ }, [user, router, options])
+}
diff --git a/web/pages/[username]/[contractSlug].tsx b/web/pages/[username]/[contractSlug].tsx
index 17453770..11d9af9c 100644
--- a/web/pages/[username]/[contractSlug].tsx
+++ b/web/pages/[username]/[contractSlug].tsx
@@ -10,7 +10,7 @@ import { useUser } from 'web/hooks/use-user'
import { ResolutionPanel } from 'web/components/resolution-panel'
import { Title } from 'web/components/title'
import { Spacer } from 'web/components/layout/spacer'
-import { listUsers, User, writeReferralInfo } from 'web/lib/firebase/users'
+import { listUsers, User } from 'web/lib/firebase/users'
import {
Contract,
getContractFromSlug,
@@ -43,9 +43,9 @@ import { CPMMBinaryContract } from 'common/contract'
import { AlertBox } from 'web/components/alert-box'
import { useTracking } from 'web/hooks/use-tracking'
import { CommentTipMap, useTipTxns } from 'web/hooks/use-tip-txns'
-import { useRouter } from 'next/router'
import { useLiquidity } from 'web/hooks/use-liquidity'
import { richTextToString } from 'common/util/parse'
+import { useSaveReferral } from 'web/hooks/use-save-referral'
export const getStaticProps = fromPropz(getStaticPropz)
export async function getStaticPropz(props: {
@@ -157,15 +157,10 @@ export function ContractPageContent(
const ogCardProps = getOpenGraphProps(contract)
- const router = useRouter()
-
- useEffect(() => {
- const { referrer } = router.query as {
- referrer?: string
- }
- if (!user && router.isReady)
- writeReferralInfo(contract.creatorUsername, contract.id, referrer)
- }, [user, contract, router])
+ useSaveReferral(user, {
+ defaultReferrer: contract.creatorUsername,
+ contractId: contract.id,
+ })
const rightSidebar = hasSidePanel ? (
diff --git a/web/pages/group/[...slugs]/index.tsx b/web/pages/group/[...slugs]/index.tsx
index 0d38580c..90f39e83 100644
--- a/web/pages/group/[...slugs]/index.tsx
+++ b/web/pages/group/[...slugs]/index.tsx
@@ -14,12 +14,7 @@ import {
} from 'web/lib/firebase/groups'
import { Row } from 'web/components/layout/row'
import { UserLink } from 'web/components/user-page'
-import {
- firebaseLogin,
- getUser,
- User,
- writeReferralInfo,
-} from 'web/lib/firebase/users'
+import { firebaseLogin, getUser, User } from 'web/lib/firebase/users'
import { Col } from 'web/components/layout/col'
import { useUser } from 'web/hooks/use-user'
import { listMembers, useGroup, useMembers } from 'web/hooks/use-group'
@@ -34,7 +29,7 @@ import { Linkify } from 'web/components/linkify'
import { fromPropz, usePropz } from 'web/hooks/use-propz'
import { Tabs } from 'web/components/layout/tabs'
import { CreateQuestionButton } from 'web/components/create-question-button'
-import React, { useEffect, useState } from 'react'
+import React, { useState } from 'react'
import { GroupChat } from 'web/components/groups/group-chat'
import { LoadingIndicator } from 'web/components/loading-indicator'
import { Modal } from 'web/components/layout/modal'
@@ -53,6 +48,7 @@ import { searchInAny } from 'common/util/parse'
import { useWindowSize } from 'web/hooks/use-window-size'
import { CopyLinkButton } from 'web/components/copy-link-button'
import { ENV_CONFIG } from 'common/envs/constants'
+import { useSaveReferral } from 'web/hooks/use-save-referral'
export const getStaticProps = fromPropz(getStaticPropz)
export async function getStaticPropz(props: { params: { slugs: string[] } }) {
@@ -155,13 +151,11 @@ export default function GroupPage(props: {
const messages = useCommentsOnGroup(group?.id)
const user = useUser()
- useEffect(() => {
- const { referrer } = router.query as {
- referrer?: string
- }
- if (!user && router.isReady)
- writeReferralInfo(creator.username, undefined, referrer, group?.id)
- }, [user, creator, group, router])
+
+ useSaveReferral(user, {
+ defaultReferrer: creator.username,
+ groupId: group?.id,
+ })
const { width } = useWindowSize()
const chatDisabled = !group || group.chatDisabled
diff --git a/web/pages/home.tsx b/web/pages/home.tsx
index 53bb6ec9..61003895 100644
--- a/web/pages/home.tsx
+++ b/web/pages/home.tsx
@@ -12,6 +12,7 @@ import { getContractFromSlug } from 'web/lib/firebase/contracts'
import { useTracking } from 'web/hooks/use-tracking'
import { track } from 'web/lib/service/analytics'
import { redirectIfLoggedOut } from 'web/lib/firebase/server-auth'
+import { useSaveReferral } from 'web/hooks/use-save-referral'
export const getServerSideProps = redirectIfLoggedOut('/')
@@ -21,6 +22,8 @@ const Home = () => {
const router = useRouter()
useTracking('view home')
+ useSaveReferral()
+
return (
<>
diff --git a/web/pages/index.tsx b/web/pages/index.tsx
index d9ff7f51..fd5cf382 100644
--- a/web/pages/index.tsx
+++ b/web/pages/index.tsx
@@ -7,6 +7,7 @@ import { LandingPagePanel } from 'web/components/landing-page-panel'
import { Col } from 'web/components/layout/col'
import { ManifoldLogo } from 'web/components/nav/manifold-logo'
import { redirectIfLoggedIn } from 'web/lib/firebase/server-auth'
+import { useSaveReferral } from 'web/hooks/use-save-referral'
export const getServerSideProps = redirectIfLoggedIn('/home', async (_) => {
// These hardcoded markets will be shown in the frontpage for signed-out users:
@@ -32,6 +33,9 @@ export default function Home(props: { hotContracts: Contract[] }) {
// on this page and they log in -- in the future we will make some cleaner way
const user = useUser()
const router = useRouter()
+
+ useSaveReferral()
+
useEffect(() => {
if (user != null) {
router.replace('/home')
diff --git a/web/pages/referrals.tsx b/web/pages/referrals.tsx
new file mode 100644
index 00000000..c879afaa
--- /dev/null
+++ b/web/pages/referrals.tsx
@@ -0,0 +1,57 @@
+import { Col } from 'web/components/layout/col'
+import { SEO } from 'web/components/SEO'
+import { Title } from 'web/components/title'
+import { useUser } from 'web/hooks/use-user'
+import { Page } from 'web/components/page'
+import { useTracking } from 'web/hooks/use-tracking'
+import { redirectIfLoggedOut } from 'web/lib/firebase/server-auth'
+import { REFERRAL_AMOUNT } from 'common/user'
+import { CopyLinkButton } from 'web/components/copy-link-button'
+import { ENV_CONFIG } from 'common/envs/constants'
+import { InfoBox } from 'web/components/info-box'
+
+export const getServerSideProps = redirectIfLoggedOut('/')
+
+export default function ReferralsPage() {
+ const user = useUser()
+
+ useTracking('view referrals')
+
+ const url = `https://${ENV_CONFIG.domain}?referrer=${user?.username}`
+
+ return (
+
+
+
+
+
+
+
+
+
+ Invite new users to Manifold and get M${REFERRAL_AMOUNT} if they
+ sign up!
+
+
+
+
+
+
+
+
+ )
+}
diff --git a/web/public/logo-flapping-with-money.gif b/web/public/logo-flapping-with-money.gif
new file mode 100644
index 0000000000000000000000000000000000000000..0ef936a42bdada3f461bf31a43179a059aab2b28
GIT binary patch
literal 293878
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
%@5yQ37{Ut$sW#%hL^-ra0|OIYSc<;
zm_!#egX!(;BiUZzA!zT!p7ms+hH>gacxH?u9g@EA5hL+t)JhhZ#2}bMWKI;U6<*MG
z&FjJr-j?tW8N_Y^&X`tiY$S0Qi!okwq}z=I0elnp5wH;zmEkq+!XV%O{7@$aArc0)
z6yOl5*jn)z^Kl=K1=JVoyBsSyDLF;ecvPrKKNR@+Fsr
z6fjpvNFW8?a3399;d!O_A+qw|%g>_CuEx|%VR9?Ga#(ERrNHGzfItimXvmF<;aMu>
zcp(3vB(sg_8V^D+BG^)aSL@PQ#n;U{O&g?Jujex(nZ&yXUDX`M~Irq;b8
z^EZR@PQ)jo`0YgmToqL9Jdtka)#mePCjX3Ot$eN7Ksh;KC6TSUW##MgaX{-L`yVCupp?6XGYWjBB&z&!#bV{oVbzEC=%3jJpZNVYE{U2DN6U%d@ysMo6jpP1i&HRhet39jiTm+2w(PO>
z(Df}EM3}~mDi7L>yLgbhaCpYJaTu`l)i|>RX$ckWrgE6gmdr3qm2V4qm6tDn7P)J9
zu=JU(WSdZK-zo*{3^)5`h+6rXo9~5YIcw;3`_*>;-0bNIDR(sjz&gZCJ!@y1qxqhb
z@BgkjVm$WrWiMZrGJrEE%Q$pFK{TH;y6igXpYsK1w_p6uDhidK2(pYxj}uBadZ#Nd
zn?ib4$abM~9s>7Hw4%`PwpGOdHFyiPr^9;YE^4S>1#wRw2(zoZno#$;3XeyORZ}v3
z$NI1XF0GSKF1sI26AstiQ2n}!FHDSEm+27_d$k9yu?t0dFCc`63<{SJS6|9JKg?hY
z*^OKKx#KIiV!K1^w*n@4t(d#{kT9s^;=x>YL1i|&>wC=d>$)$5gD>E_yGp!cPuF%g
zyQuamkMF)Se9T^~zb8b9GvFwv4kMos7GH}0PYVohD>{`o{KtDM%|bjv067DSc1e=D
zRD+9nZ%cEJ({qD-%;)RVj=Vb@xdKvi@1U*{IdZKSjKF+%p0m8n6Fs7$?Z|Jr0=6?>
z2Cop|i^H;ud{5NN7Jb!sYbHUwo-g1*|1NT4&oAq^L9DF06u5{TxYeV*uktgk2l@hn
zwEQxWX`6^O8U$*m%Y~C+hNu1B`>Hl!yQDLqvd0axFHt<_*AI#Nxu|$Su{hs5KAQFu
zt&e&Vay!20^b##J9Rq;J2aAsvRAD}T=p!onLb|Op;92u<6aBEOB!#+2Ibn0Y=*#|u
z`gxXHHwp?os1Q8=U_7GKqq&ed@|yYo>=VC>T5y(YI}%3r@j1~PyGqLI3ZBo?V-PuHqYsQH
zQKnS6l4U^;C>D^EIg@5hnmR)w-2ySFc+c+!Q;OY*~&6JbYEVmTgmp+}k@-o7)i*-e$dUx-F
z8|cYCx`3VU=Ue(1e-i?FtR-6XT|eI=i4*Se=hwfVe}Dh~0Sr*U0rgsiz5_iHAprsz
zY_Os|5Ui_!FdPI>hX`e=(5M$ez>vNOHqcPS5lJl3#1m0WQN