feat: added producthunt and peerlist embeds
This commit is contained in:
parent
5d7a20be99
commit
d20357fa6a
92
app/page.tsx
92
app/page.tsx
@ -738,39 +738,39 @@ export default function Home() {
|
||||
</div>
|
||||
</TabsContent>
|
||||
{result?.images && result.images.length > 0 && (
|
||||
<TabsContent value="images" className="p-0 m-0 bg-white">
|
||||
<div className="space-y-4 p-4">
|
||||
{result.images.map((img: { format: 'png' | 'jpeg' | 'svg', data: string }, imgIndex: number) => (
|
||||
<div key={imgIndex} className="space-y-2">
|
||||
<div className="flex justify-between items-center">
|
||||
<h4 className="text-sm font-medium">Image {imgIndex + 1}</h4>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
className="p-0 h-8 w-8"
|
||||
onClick={() => {
|
||||
const link = document.createElement('a');
|
||||
link.href = `data:image/${img.format === 'svg' ? 'svg+xml' : img.format};base64,${img.data}`;
|
||||
link.download = `generated-image-${imgIndex + 1}.${img.format}`;
|
||||
link.click();
|
||||
}}
|
||||
>
|
||||
<Download className="h-4 w-4" />
|
||||
</Button>
|
||||
<TabsContent value="images" className="p-0 m-0 bg-white">
|
||||
<div className="space-y-4 p-4">
|
||||
{result.images.map((img: { format: 'png' | 'jpeg' | 'svg', data: string }, imgIndex: number) => (
|
||||
<div key={imgIndex} className="space-y-2">
|
||||
<div className="flex justify-between items-center">
|
||||
<h4 className="text-sm font-medium">Image {imgIndex + 1}</h4>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="sm"
|
||||
className="p-0 h-8 w-8"
|
||||
onClick={() => {
|
||||
const link = document.createElement('a');
|
||||
link.href = `data:image/${img.format === 'svg' ? 'svg+xml' : img.format};base64,${img.data}`;
|
||||
link.download = `generated-image-${imgIndex + 1}.${img.format}`;
|
||||
link.click();
|
||||
}}
|
||||
>
|
||||
<Download className="h-4 w-4" />
|
||||
</Button>
|
||||
</div>
|
||||
<div className="relative w-full" style={{ aspectRatio: '16/9' }}>
|
||||
<Image
|
||||
src={`data:image/${img.format === 'svg' ? 'svg+xml' : img.format};base64,${img.data}`}
|
||||
alt={`Generated image ${imgIndex + 1}`}
|
||||
layout="fill"
|
||||
objectFit="contain"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<div className="relative w-full" style={{ aspectRatio: '16/9' }}>
|
||||
<Image
|
||||
src={`data:image/${img.format === 'svg' ? 'svg+xml' : img.format};base64,${img.data}`}
|
||||
alt={`Generated image ${imgIndex + 1}`}
|
||||
layout="fill"
|
||||
objectFit="contain"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</TabsContent>
|
||||
)}
|
||||
))}
|
||||
</div>
|
||||
</TabsContent>
|
||||
)}
|
||||
</Tabs>
|
||||
</div>
|
||||
);
|
||||
@ -1131,16 +1131,34 @@ export default function Home() {
|
||||
<Navbar />
|
||||
|
||||
<div className={`w-full max-w-[90%] sm:max-w-2xl space-y-6 p-1 ${hasSubmitted ? 'mt-16 sm:mt-20' : 'mt-[26vh] sm:mt-[30vh]'}`}>
|
||||
{!hasSubmitted &&
|
||||
<div
|
||||
className="text-center"
|
||||
>
|
||||
{!hasSubmitted && (
|
||||
<div className="text-center">
|
||||
<h1 className="text-4xl sm:text-6xl mb-1 text-primary font-serif">MiniPerplx</h1>
|
||||
<h2 className='text-xl sm:text-2xl font-serif text-balance text-center mb-6'>
|
||||
In search for minimalism and simplicity
|
||||
</h2>
|
||||
<div className="flex justify-center items-center space-x-4 mb-6">
|
||||
<Link href="https://www.producthunt.com/posts/miniperplx?embed=true&utm_source=badge-featured&utm_medium=badge&utm_souce=badge-miniperplx" target="_blank" rel="noopener noreferrer" passHref>
|
||||
<Image
|
||||
src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=481378&theme=light"
|
||||
alt="MiniPerplx - A minimalistic AI-powered search engine. | Product Hunt"
|
||||
width={250}
|
||||
height={54}
|
||||
className="h-auto w-auto"
|
||||
/>
|
||||
</Link>
|
||||
<Link href="https://peerlist.io/zaidmukaddam/project/miniperplx" target="_blank" rel="noopener noreferrer" passHref>
|
||||
<Image
|
||||
src="/Launch_SVG_Light.svg"
|
||||
alt="Peerlist"
|
||||
width={32}
|
||||
height={32}
|
||||
className="h-auto w-auto"
|
||||
/>
|
||||
</Link>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
)}
|
||||
<AnimatePresence>
|
||||
{!hasSubmitted && (
|
||||
<motion.div
|
||||
|
||||
@ -1,12 +1,23 @@
|
||||
/** @type {import('next').NextConfig} */
|
||||
const nextConfig = {
|
||||
images: {
|
||||
remotePatterns: [{
|
||||
protocol: 'https',
|
||||
hostname: 'www.google.com',
|
||||
port: '',
|
||||
pathname: '/s2/favicons',
|
||||
}]
|
||||
dangerouslyAllowSVG: true,
|
||||
remotePatterns: [
|
||||
{
|
||||
protocol: 'https',
|
||||
hostname: 'www.google.com',
|
||||
port: '',
|
||||
pathname: '/s2/favicons',
|
||||
},
|
||||
// https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=481378&theme=light
|
||||
{
|
||||
protocol: 'https',
|
||||
hostname: 'api.producthunt.com',
|
||||
port: '',
|
||||
pathname: '/widgets/embed-image/v1/featured.svg',
|
||||
},
|
||||
|
||||
]
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@ -9,7 +9,6 @@
|
||||
"lint": "next lint"
|
||||
},
|
||||
"dependencies": {
|
||||
"@ai-sdk/anthropic": "latest",
|
||||
"@ai-sdk/openai": "^0.0.46",
|
||||
"@e2b/code-interpreter": "^0.0.8",
|
||||
"@radix-ui/react-accordion": "^1.2.0",
|
||||
|
||||
@ -5,9 +5,6 @@ settings:
|
||||
excludeLinksFromLockfile: false
|
||||
|
||||
dependencies:
|
||||
'@ai-sdk/anthropic':
|
||||
specifier: latest
|
||||
version: 0.0.43(zod@3.23.8)
|
||||
'@ai-sdk/openai':
|
||||
specifier: ^0.0.46
|
||||
version: 0.0.46(zod@3.23.8)
|
||||
@ -55,7 +52,7 @@ dependencies:
|
||||
version: 1.4.0
|
||||
ai:
|
||||
specifier: latest
|
||||
version: 3.3.11(react@18.3.1)(svelte@4.2.18)(vue@3.4.35)(zod@3.23.8)
|
||||
version: 3.3.12(react@18.3.1)(svelte@4.2.18)(vue@3.4.35)(zod@3.23.8)
|
||||
class-variance-authority:
|
||||
specifier: ^0.7.0
|
||||
version: 0.7.0
|
||||
@ -139,17 +136,6 @@ devDependencies:
|
||||
|
||||
packages:
|
||||
|
||||
/@ai-sdk/anthropic@0.0.43(zod@3.23.8):
|
||||
resolution: {integrity: sha512-X9GBINVeaynnpSETD6rBgkmkR5VynceyVe8FxDCM+5jQF9fNNPCpaXX/syE9G8HH941HGFdEcFuGuLR6MvNdeA==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
zod: ^3.0.0
|
||||
dependencies:
|
||||
'@ai-sdk/provider': 0.0.20
|
||||
'@ai-sdk/provider-utils': 1.0.13(zod@3.23.8)
|
||||
zod: 3.23.8
|
||||
dev: false
|
||||
|
||||
/@ai-sdk/openai@0.0.46(zod@3.23.8):
|
||||
resolution: {integrity: sha512-RdE/PjdGt5zeE19qd/aqEr6fz6lhA5IWzBMy+N3dkdGtijT+eJP7Kxta6lYwnevkr1yqRPXYkYX/6v/s6xVY4A==}
|
||||
engines: {node: '>=18'}
|
||||
@ -177,8 +163,8 @@ packages:
|
||||
zod: 3.23.8
|
||||
dev: false
|
||||
|
||||
/@ai-sdk/provider-utils@1.0.13(zod@3.23.8):
|
||||
resolution: {integrity: sha512-NDQUUBDQoWk9aGn2pOA5wiM5CdO57KeYTEph7PpKGEU8IyqI0d+CiYKISOia6Omy17d+Dw/ZM6KP98F89BGJ5A==}
|
||||
/@ai-sdk/provider-utils@1.0.14(zod@3.23.8):
|
||||
resolution: {integrity: sha512-6jKYgg/iitJiz9ivlTx1CDrQBx1BeSd0IlRJ/Fl5LcdGAc3gnsMVR+R1w1jxzyhjVyh6g+NqlOZenW0tctNZnA==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
zod: ^3.0.0
|
||||
@ -186,7 +172,7 @@ packages:
|
||||
zod:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@ai-sdk/provider': 0.0.20
|
||||
'@ai-sdk/provider': 0.0.21
|
||||
eventsource-parser: 1.1.2
|
||||
nanoid: 3.3.6
|
||||
secure-json-parse: 2.7.0
|
||||
@ -200,15 +186,15 @@ packages:
|
||||
json-schema: 0.4.0
|
||||
dev: false
|
||||
|
||||
/@ai-sdk/provider@0.0.20:
|
||||
resolution: {integrity: sha512-nCQZRUTi/+y+kf1ep9rujpbQEtsIwySzlQAudiFeVhzzDi9rYvWp5tOSVu8/ArT+i1xSc2tw40akxb1TX73ofQ==}
|
||||
/@ai-sdk/provider@0.0.21:
|
||||
resolution: {integrity: sha512-9j95uaPRxwYkzQdkl4XO/MmWWW5c5vcVSXtqvALpD9SMB9fzH46dO3UN4VbOJR2J3Z84CZAqgZu5tNlkptT9qQ==}
|
||||
engines: {node: '>=18'}
|
||||
dependencies:
|
||||
json-schema: 0.4.0
|
||||
dev: false
|
||||
|
||||
/@ai-sdk/react@0.0.46(react@18.3.1)(zod@3.23.8):
|
||||
resolution: {integrity: sha512-MQHC6AxEUi10++8LsnR3NUK+VkxB2sEWVlFxYrj6PKF5krxWnLgoCmpvbAdM6oc5b9byySBJaj6ZxRxutRpWtQ==}
|
||||
/@ai-sdk/react@0.0.47(react@18.3.1)(zod@3.23.8):
|
||||
resolution: {integrity: sha512-lvH5vscfiH93zbJCTR4GZoX0FuiCShEKZVYVQSaE8wod+lc/LaFp9u7sXgHeZOCQj06C68WB88h90V2l9P6cig==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
react: ^18 || ^19
|
||||
@ -219,15 +205,15 @@ packages:
|
||||
zod:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@ai-sdk/provider-utils': 1.0.13(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.33(zod@3.23.8)
|
||||
'@ai-sdk/provider-utils': 1.0.14(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.34(zod@3.23.8)
|
||||
react: 18.3.1
|
||||
swr: 2.2.5(react@18.3.1)
|
||||
zod: 3.23.8
|
||||
dev: false
|
||||
|
||||
/@ai-sdk/solid@0.0.36(zod@3.23.8):
|
||||
resolution: {integrity: sha512-pm57goMQczSpPTNrUrwbab5BybZYofBRZ10UkTi2KgJP5i+S/sGHSh/xtgZz+xNpUt42pk8aYvOiNDN1ppjkDA==}
|
||||
/@ai-sdk/solid@0.0.37(zod@3.23.8):
|
||||
resolution: {integrity: sha512-KfRHEjBNmtm78Ch1MmTjuvUb7EHOCWiZrypqZt+R0EZJ6X9SIy4fwlXpY/Mn5WuOweAK7vL+woIAlk0SIRSF0w==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
solid-js: ^1.7.7
|
||||
@ -235,14 +221,14 @@ packages:
|
||||
solid-js:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@ai-sdk/provider-utils': 1.0.13(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.33(zod@3.23.8)
|
||||
'@ai-sdk/provider-utils': 1.0.14(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.34(zod@3.23.8)
|
||||
transitivePeerDependencies:
|
||||
- zod
|
||||
dev: false
|
||||
|
||||
/@ai-sdk/svelte@0.0.38(svelte@4.2.18)(zod@3.23.8):
|
||||
resolution: {integrity: sha512-sTNkxzhS1B0TDdVWZR6yXG+3qQGYAxMwcEKzMVjm1VdpGlZits1PxF39aVvPldaWM8QB4MrVE+H5b5dTA43D0Q==}
|
||||
/@ai-sdk/svelte@0.0.39(svelte@4.2.18)(zod@3.23.8):
|
||||
resolution: {integrity: sha512-7t/DfxlsWqA+3gDNEUX9ONgdzCpPfPKzkxsE3UGtHvrRLknbLa692yNGJNi0OVB5V++vhtpPw4LViPEmj6DV2w==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
svelte: ^3.0.0 || ^4.0.0
|
||||
@ -250,16 +236,16 @@ packages:
|
||||
svelte:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@ai-sdk/provider-utils': 1.0.13(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.33(zod@3.23.8)
|
||||
'@ai-sdk/provider-utils': 1.0.14(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.34(zod@3.23.8)
|
||||
sswr: 2.1.0(svelte@4.2.18)
|
||||
svelte: 4.2.18
|
||||
transitivePeerDependencies:
|
||||
- zod
|
||||
dev: false
|
||||
|
||||
/@ai-sdk/ui-utils@0.0.33(zod@3.23.8):
|
||||
resolution: {integrity: sha512-2oZjZzZG3AGQihO1d3mWqgFuywTtjBtkUEeE7d8nicw3QQv9m1MwrbQqRhhKbbBetBke6V9o5FQ5wngmb/+3iw==}
|
||||
/@ai-sdk/ui-utils@0.0.34(zod@3.23.8):
|
||||
resolution: {integrity: sha512-8nTBsQklLrp6r/AJyeWxD8D4pvhQhlGfrDaBAfo7OEdBLwF6bNdnh6CJFSwUMiXUtUPOBqPV5tFgY2pJmGQikg==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
zod: ^3.0.0
|
||||
@ -267,16 +253,16 @@ packages:
|
||||
zod:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@ai-sdk/provider': 0.0.20
|
||||
'@ai-sdk/provider-utils': 1.0.13(zod@3.23.8)
|
||||
'@ai-sdk/provider': 0.0.21
|
||||
'@ai-sdk/provider-utils': 1.0.14(zod@3.23.8)
|
||||
json-schema: 0.4.0
|
||||
secure-json-parse: 2.7.0
|
||||
zod: 3.23.8
|
||||
zod-to-json-schema: 3.22.5(zod@3.23.8)
|
||||
dev: false
|
||||
|
||||
/@ai-sdk/vue@0.0.38(vue@3.4.35)(zod@3.23.8):
|
||||
resolution: {integrity: sha512-iqVPsRDXkrfIFzwrWoUKqBzMqSHxJQoompdj0LCC9v3s9c4ndn9Vx67nB5g2ee3fO3bY/O9vLebDwYyVKM4glg==}
|
||||
/@ai-sdk/vue@0.0.39(vue@3.4.35)(zod@3.23.8):
|
||||
resolution: {integrity: sha512-lIcDV1PieneN6yxb7LDdYmXEOearRxdvAgVvMdtAS+Fc4s8basaidh6AA6OFOPAVc16PchpfZCVREfve0r6pUw==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
vue: ^3.3.4
|
||||
@ -284,8 +270,8 @@ packages:
|
||||
vue:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@ai-sdk/provider-utils': 1.0.13(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.33(zod@3.23.8)
|
||||
'@ai-sdk/provider-utils': 1.0.14(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.34(zod@3.23.8)
|
||||
swrv: 1.0.4(vue@3.4.35)
|
||||
vue: 3.4.35(typescript@5.5.4)
|
||||
transitivePeerDependencies:
|
||||
@ -1606,8 +1592,8 @@ packages:
|
||||
engines: {node: '>=0.4.0'}
|
||||
hasBin: true
|
||||
|
||||
/ai@3.3.11(react@18.3.1)(svelte@4.2.18)(vue@3.4.35)(zod@3.23.8):
|
||||
resolution: {integrity: sha512-KPfikv3KDqFbZXRoB3jaM6bRJGU2ivmk12ahmo8LynEq1zqJJPc/2JEqlXNG9MoAQo3tQuqYiQfDzPIEO4aObA==}
|
||||
/ai@3.3.12(react@18.3.1)(svelte@4.2.18)(vue@3.4.35)(zod@3.23.8):
|
||||
resolution: {integrity: sha512-vmum83qRAWNPWFiaxhQNMAksZhjcSFdGlUdQubifCvYS1wptDFxz9WyLgh4hwUPiJNX5sNuUqra6U1VndLZ6Aw==}
|
||||
engines: {node: '>=18'}
|
||||
peerDependencies:
|
||||
openai: ^4.42.0
|
||||
@ -1627,13 +1613,13 @@ packages:
|
||||
zod:
|
||||
optional: true
|
||||
dependencies:
|
||||
'@ai-sdk/provider': 0.0.20
|
||||
'@ai-sdk/provider-utils': 1.0.13(zod@3.23.8)
|
||||
'@ai-sdk/react': 0.0.46(react@18.3.1)(zod@3.23.8)
|
||||
'@ai-sdk/solid': 0.0.36(zod@3.23.8)
|
||||
'@ai-sdk/svelte': 0.0.38(svelte@4.2.18)(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.33(zod@3.23.8)
|
||||
'@ai-sdk/vue': 0.0.38(vue@3.4.35)(zod@3.23.8)
|
||||
'@ai-sdk/provider': 0.0.21
|
||||
'@ai-sdk/provider-utils': 1.0.14(zod@3.23.8)
|
||||
'@ai-sdk/react': 0.0.47(react@18.3.1)(zod@3.23.8)
|
||||
'@ai-sdk/solid': 0.0.37(zod@3.23.8)
|
||||
'@ai-sdk/svelte': 0.0.39(svelte@4.2.18)(zod@3.23.8)
|
||||
'@ai-sdk/ui-utils': 0.0.34(zod@3.23.8)
|
||||
'@ai-sdk/vue': 0.0.39(vue@3.4.35)(zod@3.23.8)
|
||||
'@opentelemetry/api': 1.9.0
|
||||
eventsource-parser: 1.1.2
|
||||
json-schema: 0.4.0
|
||||
|
||||
40
public/Launch_SVG_Light.svg
Normal file
40
public/Launch_SVG_Light.svg
Normal file
File diff suppressed because one or more lines are too long
|
After Width: | Height: | Size: 39 KiB |
Loading…
Reference in New Issue
Block a user