+
+ Stop browsing #{tag}. Make it yours.
+
+
+ This page is the map. A free daily.dev account turns it into a living
+ feed tuned by what you read, save, upvote, and discuss.
+
+
+ }
+ onClick={onJoin}
+ className="shrink-0"
+ >
+ Build my #{tag} feed
+
+
+);
diff --git a/packages/shared/src/components/tags/TagPageHero.tsx b/packages/shared/src/components/tags/TagPageHero.tsx
new file mode 100644
index 0000000000..4f03181753
--- /dev/null
+++ b/packages/shared/src/components/tags/TagPageHero.tsx
@@ -0,0 +1,169 @@
+import type { ReactElement, ReactNode } from 'react';
+import React, { Fragment } from 'react';
+import classNames from 'classnames';
+import type { ButtonProps } from '../buttons/Button';
+import { Button, ButtonSize, ButtonVariant } from '../buttons/Button';
+import { BlockIcon, PlusIcon } from '../icons';
+import {
+ Typography,
+ TypographyColor,
+ TypographyTag,
+ TypographyType,
+} from '../typography/Typography';
+
+export type TagStatus = 'followed' | 'blocked' | 'unfollowed';
+
+export interface TagPageStat {
+ label: string;
+ value: string;
+ caption?: string;
+}
+
+const TagStatTicker = ({ stats }: { stats: TagPageStat[] }): ReactElement => (
+
+
+ #
+ {title}
+
+
+ {description ||
+ `Everything developers are reading, saving, upvoting, and debating around #${tag} โ curated first, then the full live stream.`}
+
+