Skip to content

Commit 295d137

Browse files
committed
feat(ui): differentiate legacy vs one-time referrals in UI
- Add is_legacy field to referrals API response - Update CreditsBadge to show "per month" for legacy, "(one-time)" for new - Add "(legacy)" label next to legacy referrals in the list - Change main description to "one-time bonus" instead of "per month" - Add defensive default for is_legacy in Zod schema
1 parent 2fef96d commit 295d137

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

web/src/app/api/referrals/route.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,13 @@ import { extractApiKeyFromHeader } from '@/util/auth'
1313
import type { NextRequest } from 'next/server'
1414

1515
type Referral = Pick<typeof schema.user.$inferSelect, 'id' | 'name' | 'email'> &
16-
Pick<typeof schema.referral.$inferSelect, 'credits'>
16+
Pick<typeof schema.referral.$inferSelect, 'credits' | 'is_legacy'>
1717
const ReferralSchema = z.object({
1818
id: z.string(),
1919
name: z.string(),
2020
email: z.string().email(),
2121
credits: z.coerce.number(),
22+
is_legacy: z.boolean().default(false),
2223
})
2324

2425
export type ReferralData = {
@@ -52,6 +53,7 @@ export async function GET() {
5253
.select({
5354
id: schema.referral.referred_id,
5455
credits: schema.referral.credits,
56+
is_legacy: schema.referral.is_legacy,
5557
})
5658
.from(schema.referral)
5759
.where(eq(schema.referral.referrer_id, session.user.id))
@@ -62,6 +64,7 @@ export async function GET() {
6264
name: schema.user.name,
6365
email: schema.user.email,
6466
credits: referralsQuery.credits,
67+
is_legacy: referralsQuery.is_legacy,
6568
})
6669
.from(referralsQuery)
6770
.leftJoin(schema.user, eq(schema.user.id, referralsQuery.id))
@@ -71,6 +74,7 @@ export async function GET() {
7174
.select({
7275
id: schema.referral.referrer_id,
7376
credits: schema.referral.credits,
77+
is_legacy: schema.referral.is_legacy,
7478
})
7579
.from(schema.referral)
7680
.where(eq(schema.referral.referred_id, session.user.id))
@@ -82,6 +86,7 @@ export async function GET() {
8286
name: schema.user.name,
8387
email: schema.user.email,
8488
credits: referredByIdQuery.credits,
89+
is_legacy: referredByIdQuery.is_legacy,
8590
})
8691
.from(referredByIdQuery)
8792
.leftJoin(schema.user, eq(schema.user.id, referredByIdQuery.id))

web/src/app/profile/components/referrals-section.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,18 @@ const copyReferral = (link: string) => {
3333
})
3434
}
3535

36-
const CreditsBadge = (credits: number) => {
36+
const CreditsBadge = ({
37+
credits,
38+
isLegacy,
39+
}: {
40+
credits: number
41+
isLegacy: boolean
42+
}) => {
3743
return (
3844
<span
3945
className={`flex-none p-2 rounded-full text-xs bg-gradient-to-r from-green-300 to-emerald-300 dark:from-green-600 dark:to-emerald-600 text-green-800 dark:text-white font-semibold item-center text-center shadow-sm`}
4046
>
41-
+{credits} credits
47+
+{credits} credits{isLegacy && ' per month'}
4248
</span>
4349
)
4450
}
@@ -111,7 +117,10 @@ export function ReferralsSection() {
111117
<div className="text-sm flex items-center">
112118
<p>{data.referredBy.name} referred you. </p>
113119
</div>
114-
{CreditsBadge(data.referredBy.credits)}
120+
<CreditsBadge
121+
credits={data.referredBy.credits}
122+
isLegacy={data.referredBy.is_legacy}
123+
/>
115124
</div>
116125
</CardContent>
117126
</Card>
@@ -124,7 +133,7 @@ export function ReferralsSection() {
124133
</CardTitle>
125134
<CardDescription className="text-green-700 dark:text-green-300">
126135
Refer a friend and <b>you'll both</b> earn {CREDITS_REFERRAL_BONUS}{' '}
127-
credits per month!{' '}
136+
credits as a one-time bonus!{' '}
128137
</CardDescription>
129138
</CardHeader>
130139
<CardContent>
@@ -203,9 +212,9 @@ export function ReferralsSection() {
203212
className="flex justify-between items-center"
204213
>
205214
<span>
206-
{r.name} ({r.email})
215+
{r.name} ({r.email}){r.is_legacy && ' (legacy)'}
207216
</span>
208-
{CreditsBadge(r.credits)}
217+
<CreditsBadge credits={r.credits} isLegacy={r.is_legacy} />
209218
</li>
210219
))}
211220
</ul>

0 commit comments

Comments
 (0)