Skip to content
This repository was archived by the owner on Jul 2, 2026. It is now read-only.

Commit a2959f4

Browse files
committed
Fix homes and utm
1 parent a066baf commit a2959f4

6 files changed

Lines changed: 76 additions & 159 deletions

File tree

apps/web/next.config.mjs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ const nextConfig = {
4141
port: "",
4242
pathname: "/**",
4343
},
44+
{
45+
protocol: "https",
46+
hostname: "oghunt.com",
47+
port: "",
48+
pathname: "/**",
49+
},
4450
],
4551
},
4652
};

apps/web/src/app/homies/page.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,17 +19,17 @@ export default function Component() {
1919

2020
<div className="flex flex-col gap-4 overflow-hidden px-2 text-left md:gap-8">
2121
{PROJECTS.map((item, idx) => (
22-
<>
22+
<div key={`homie-${item.id}`}>
2323
{idx !== 0 && (
2424
<div className="flex h-0.5 w-full bg-neutral-200 md:hidden dark:bg-neutral-800" />
2525
)}
2626
<div key={`desktop-${item.name}`} className="hidden md:flex">
27-
<Card key={`card-${item.name}`} homie index={idx} post={item} />
27+
<Card key={`card-${item.name}`} homie index={idx} post={item} url={item.url} />
2828
</div>
2929
<div key={`mobile-${item.name}`} className="md:hidden">
30-
<MobileCard key={`card-${item.name}`} post={item} />
30+
<MobileCard key={`card-${item.name}`} post={item} url={item.url} />
3131
</div>
32-
</>
32+
</div>
3333
))}
3434
</div>
3535
</div>

apps/web/src/app/projects.ts

Lines changed: 60 additions & 150 deletions
Original file line numberDiff line numberDiff line change
@@ -1,176 +1,86 @@
11
import type { ProductPost } from "./types";
22

3-
export const PROJECTS: ProductPost[] = [
4-
{
5-
id: "1",
3+
let projectCounter = 1;
4+
5+
export function createProject(
6+
data: Omit<ProductPost, "id" | "topics" | "createdAt" | "votesCount" | "deleted" | "hasAi"> & {
7+
topics: string[];
8+
},
9+
): ProductPost {
10+
const projectId = projectCounter.toString();
11+
projectCounter++;
12+
13+
const { topics: topicNames, ...restData } = data;
14+
15+
return {
16+
id: projectId,
617
hasAi: false,
7-
topics: [
8-
{
9-
name: "Discord",
10-
description: "",
11-
id: "1",
12-
postId: "1",
13-
},
14-
{
15-
name: "Tauri",
16-
description: "",
17-
id: "1",
18-
postId: "1",
19-
},
20-
{
21-
name: "React",
22-
description: "",
23-
id: "1",
24-
postId: "1",
25-
},
26-
{
27-
name: "Rust",
28-
description: "",
29-
id: "1",
30-
postId: "1",
31-
},
32-
],
3318
deleted: false,
34-
tagline: "Something about discord? idk",
19+
votesCount: 0,
3520
createdAt: new Date(),
36-
votesCount: 1337,
37-
thumbnailUrl:
38-
"https://raw.githubusercontent.com/overlayeddev/overlayed/main/apps/web/public/favicon_io/apple-touch-icon.png",
21+
topics: topicNames.map((topicName, index) => ({
22+
name: topicName,
23+
description: "",
24+
id: `${projectId}-${index + 1}`,
25+
postId: projectId,
26+
})),
27+
...restData,
28+
};
29+
}
30+
31+
export const PROJECTS: ProductPost[] = [
32+
createProject({
33+
name: "OGHUNT",
34+
url: "https://oghunt.com",
35+
tagline: "Product Hunt with ZERO AI Slop",
36+
description: "Product Hunt with ZERO AI Slop",
37+
thumbnailUrl: "https://oghunt.com/icon-128.png",
38+
topics: ["Product Hunt", "AI", "Next.js"],
39+
}),
40+
createProject({
3941
name: "Overlayed",
4042
url: "https://overlayed.dev",
43+
tagline: "Something about discord? idk",
4144
description:
4245
"See who's speaking in your Discord voice channel with a movable overlay, compatible with almost every game or app",
43-
},
44-
{
45-
id: "1",
46-
hasAi: false,
47-
topics: [
48-
{
49-
name: "Job Hunt",
50-
description: "",
51-
id: "1",
52-
postId: "1",
53-
},
54-
{
55-
name: "Productivity",
56-
description: "",
57-
id: "1",
58-
postId: "1",
59-
},
60-
{
61-
name: "React",
62-
description: "",
63-
id: "1",
64-
postId: "1",
65-
},
66-
],
67-
deleted: false,
68-
tagline: "Easily track job applications",
69-
createdAt: new Date(),
70-
votesCount: 1337,
71-
thumbnailUrl: "https://my.flosa.app/img/logo-ball.png",
46+
thumbnailUrl:
47+
"https://raw.githubusercontent.com/overlayeddev/overlayed/main/apps/web/public/favicon_io/apple-touch-icon.png",
48+
topics: ["Discord", "Tauri", "React", "Rust"],
49+
}),
50+
createProject({
7251
name: "Flosa",
7352
url: "https://flosa.app",
53+
tagline: "Easily track job applications",
7454
description:
7555
"Flosa is a website designed to help users organize their job search process. It allows users to track applications, update statuses, visualize progress with a Sankey diagram, manage contacts and use a browser extension to save jobs from over 1,000 supported websites.",
76-
},
77-
{
78-
id: "1",
79-
hasAi: false,
80-
topics: [
81-
{
82-
name: "Seattle",
83-
description: "",
84-
id: "1",
85-
postId: "1",
86-
},
87-
{
88-
name: "Food",
89-
description: "",
90-
id: "1",
91-
postId: "1",
92-
},
93-
{
94-
name: "Svelte",
95-
description: "",
96-
id: "1",
97-
postId: "1",
98-
},
99-
],
100-
deleted: false,
101-
tagline: "See the health inspection results of Seattle restaurants",
102-
createdAt: new Date(),
103-
votesCount: 42069,
104-
thumbnailUrl: "https://www.seattlesafeeats.com/favicon.png",
56+
thumbnailUrl: "https://my.flosa.app/img/logo-ball.png",
57+
topics: ["Job Hunt", "Productivity", "React"],
58+
}),
59+
createProject({
10560
name: "Seattle Safe Eats",
10661
url: "https://seattlesafeeats.com",
62+
tagline: "See the health inspection results of Seattle restaurants",
10763
description:
10864
"Seattle Safe Eats is a tool that helps you find restaurants that have passed health inspections in Seattle.",
109-
},
110-
{
111-
id: "1",
112-
hasAi: false,
113-
topics: [
114-
{
115-
name: "Spotify",
116-
description: "",
117-
id: "1",
118-
postId: "1",
119-
},
120-
{
121-
name: "Music",
122-
description: "",
123-
id: "1",
124-
postId: "1",
125-
},
126-
{
127-
name: "React",
128-
description: "",
129-
id: "1",
130-
postId: "1",
131-
},
132-
],
133-
deleted: false,
134-
tagline: "A clean and simple way to share your Spotify stats",
135-
createdAt: new Date(),
136-
votesCount: 69420,
137-
thumbnailUrl: "https://splist.fm/android-chrome-192x192.png",
65+
thumbnailUrl: "https://www.seattlesafeeats.com/favicon.png",
66+
topics: ["Seattle", "Food", "Svelte"],
67+
}),
68+
createProject({
13869
name: "Splist.fm",
13970
url: "https://splist.fm/",
71+
tagline: "A clean and simple way to share your Spotify stats",
14072
description:
14173
"share your spotify playlists with friends and family so that they know you listen to good music",
142-
},
143-
{
144-
id: "1",
145-
hasAi: false,
146-
topics: [
147-
{
148-
name: "Astro",
149-
description: "",
150-
id: "1",
151-
postId: "1",
152-
},
153-
{
154-
name: "Markdown",
155-
description: "",
156-
id: "1",
157-
postId: "1",
158-
},
159-
{
160-
name: "Food",
161-
description: "",
162-
id: "1",
163-
postId: "1",
164-
},
165-
],
166-
deleted: false,
167-
tagline: "Recipes made by an Australian chef",
168-
createdAt: new Date(),
169-
votesCount: 420,
170-
thumbnailUrl: "https://cook-around-find-out-v2.vercel.app/logo-1000.jpg",
74+
thumbnailUrl: "https://splist.fm/android-chrome-192x192.png",
75+
topics: ["Spotify", "Music", "React"],
76+
}),
77+
createProject({
17178
name: "Cook Around and Find Out",
17279
url: "https://cook-around-find-out-v2.vercel.app/",
80+
tagline: "Recipes made by an Australian chef",
17381
description:
17482
"Published recipes that I have piss-farted around with or found online and changed to my liking",
175-
},
83+
thumbnailUrl: "https://cook-around-find-out-v2.vercel.app/logo-1000.jpg",
84+
topics: ["Astro", "Markdown", "Food"],
85+
}),
17686
];

apps/web/src/app/view/[slug]/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ export default async function ProjectPage({ params }: PageProps) {
7474
<div className="flex gap-4 mt-8">
7575
<Button asChild>
7676
<a
77-
href={`https://www.producthunt.com/posts/${project.id}`}
77+
href={`https://www.producthunt.com/posts/${project.id}?utm_source=oghunt&utm_medium=referral&utm_campaign=view`}
7878
target="_blank"
7979
rel="noopener noreferrer"
8080
className="flex items-center gap-2"

apps/web/src/components/card.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ interface CardProps {
99
post: ProductPost;
1010
index: number;
1111
homie?: boolean;
12+
url?: string;
1213
}
1314

14-
export const Card = ({ post, index, homie = false }: CardProps) => {
15+
export const Card = ({ post, index, homie = false, url }: CardProps) => {
1516
return (
1617
<Link
17-
href={`/view/${generatePostSlug(post)}`}
18+
href={homie && url ? url : `/view/${generatePostSlug(post)}`}
1819
key={post.id}
1920
className="group flex w-full cursor-pointer flex-row items-center gap-8 rounded-2xl p-8 duration-300 dark:hover:bg-neutral-900 hover:bg-white hover:shadow-lg hover:-translate-y-0.5 active:duration-75 active:scale-98 active:origin-bottom active:shadow-none border border-dashed border-transparent hover:border-neutral-300 hover:rounded-3xl dark:hover:border-neutral-800"
2021
>

apps/web/src/components/mobile-card.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import type { ProductPost } from "../app/types";
33
import { generatePostSlug } from "../app/utils/string";
44
import { Pill } from "./pill";
55

6-
export const MobileCard = ({ post }: { post: ProductPost }) => {
6+
export const MobileCard = ({ post, url }: { post: ProductPost; url?: string }) => {
77
return (
88
<Link
9-
href={`/view/${generatePostSlug(post)}`}
9+
href={url ? url : `/view/${generatePostSlug(post)}`}
1010
key={post.id}
1111
className="items-cener group w-full cursor-pointer flex-col gap-8 rounded-2xl duration-300 hover:bg-neutral-300/50 dark:hover:bg-neutral-900"
1212
>

0 commit comments

Comments
 (0)