diff --git a/src/webapp/features/profile/components/profileTabs/TabItem.tsx b/src/webapp/features/profile/components/profileTabs/TabItem.tsx
index e2fdfc97..9b509645 100644
--- a/src/webapp/features/profile/components/profileTabs/TabItem.tsx
+++ b/src/webapp/features/profile/components/profileTabs/TabItem.tsx
@@ -3,6 +3,7 @@
import { Badge, Tabs } from '@mantine/core';
import classes from './TabItem.module.css';
import { useRouter } from 'next/navigation';
+import { abbreviateNumber } from '@/lib/utils/text';
interface Props {
value: string;
@@ -22,7 +23,7 @@ export default function TabItem(props: Props) {
rightSection={
props.count && props.count > 0 ? (
- {props.count > 99 ? '99+' : props.count}
+ {abbreviateNumber(props.count)}
) : undefined
}
diff --git a/src/webapp/features/semble/components/sembleTabs/TabItem.tsx b/src/webapp/features/semble/components/sembleTabs/TabItem.tsx
index 519344a9..c08c4919 100644
--- a/src/webapp/features/semble/components/sembleTabs/TabItem.tsx
+++ b/src/webapp/features/semble/components/sembleTabs/TabItem.tsx
@@ -2,6 +2,7 @@ import { Badge, TabsTab } from '@mantine/core';
import classes from './TabItem.module.css';
import { track } from '@vercel/analytics';
import posthog from 'posthog-js';
+import { abbreviateNumber } from '@/lib/utils/text';
interface Props {
value: string;
@@ -18,7 +19,7 @@ export default function TabItem(props: Props) {
rightSection={
props.count && props.count > 0 ? (
- {props.count > 99 ? '99+' : props.count}
+ {abbreviateNumber(props.count)}
) : undefined
}
diff --git a/src/webapp/lib/utils/text.ts b/src/webapp/lib/utils/text.ts
index 41a1fc38..a580b7c9 100644
--- a/src/webapp/lib/utils/text.ts
+++ b/src/webapp/lib/utils/text.ts
@@ -14,3 +14,19 @@ export const sanitizeText = (text: string): string => {
// remove known bidirectional control characters
return text.replace(/[\u202E\u202D\u202B\u200F\u200E\u202C\u200C]/g, '');
};
+
+export const abbreviateNumber = (num: number): string => {
+ if (num < 1000) {
+ return num.toString();
+ }
+
+ if (num < 1_000_000) {
+ return (num / 1000).toFixed(1).replace(/\.0$/, '') + 'k';
+ }
+
+ if (num < 1_000_000_000) {
+ return (num / 1_000_000).toFixed(1).replace(/\.0$/, '') + 'M';
+ }
+
+ return (num / 1_000_000_000).toFixed(1).replace(/\.0$/, '') + 'B';
+};