fix fonts, system prompt and manifest.

This commit is contained in:
zaidmukaddam 2025-01-05 14:54:11 +05:30
parent 2a7c062ac4
commit c8acff752d
12 changed files with 132 additions and 121 deletions

View File

@ -167,11 +167,13 @@ const groupPrompts = {
- Specify the year or "latest" in queries to fetch recent information. - Specify the year or "latest" in queries to fetch recent information.
#### Retrieve Tool: #### Retrieve Tool:
- Use this for extracting information from specific URLs, categorized as "normal" or "news." - Use this for extracting information from specific URLs provided.
- Do not use this tool for general web searches. - Do not use this tool for general web searches.
#### Weather Data: #### Weather Data:
- Provide only the current day's weather in 3-hour intervals. Avoid forecasts for subsequent days. - Run the tool with the location and date parameters directly no need to plan in the thinking canvas.
- When you get the weather data, talk about the weather conditions and what to wear or do in that weather.
- Answer in paragraphs and no need of citations for this tool.
#### Programming Tool: #### Programming Tool:
- Use this Python-only sandbox for calculations, data analysis, or visualizations. - Use this Python-only sandbox for calculations, data analysis, or visualizations.
@ -185,7 +187,8 @@ const groupPrompts = {
- Only use the text_translate tool for user-requested translations. - Only use the text_translate tool for user-requested translations.
#### Stock Charts: #### Stock Charts:
- Assume stock names from user queries. Use 'yfinance' and include installation commands. - Assume stock names from user queries. Use the programming tool with Python code including 'yfinance'.
- Once the response is ready, talk about the stock's performance and trends, and then finish with the stock chart like this ![Stock Chart](URL).
#### Image Search: #### Image Search:
- Analyze image details to determine tool parameters. - Analyze image details to determine tool parameters.
@ -196,9 +199,9 @@ const groupPrompts = {
### Prohibited Actions: ### Prohibited Actions:
- Never write your thoughts or preamble before running a tool. - Never write your thoughts or preamble before running a tool.
- Avoid running the same tool twice with identical parameters. - Avoid running the same tool twice with same parameters.
- Do not include images in responses unless explicitly allowed (e.g., plots from the programming tool). - Do not include images in responses unless explicitly allowed (e.g., plots from the programming tool).
- Avoid GUI-based Python code. - Avoid running GUI-based Python code in the programming tool.
- Do not run 'web_search' for stock queries. - Do not run 'web_search' for stock queries.
### Citations Rules: ### Citations Rules:

View File

@ -5,8 +5,6 @@
:root { :root {
--font-serif: "Instrument Serif", serif; --font-serif: "Instrument Serif", serif;
--font-sans: "Inter", sans-serif;
--font-mono: "IBM Plex Mono", monospace;
} }
body { body {

View File

@ -3,9 +3,10 @@ import 'katex/dist/katex.min.css';
import 'mapbox-gl/dist/mapbox-gl.css'; import 'mapbox-gl/dist/mapbox-gl.css';
import { Metadata, Viewport } from "next"; import { Metadata, Viewport } from "next";
import { Toaster } from "sonner"; import { Toaster } from "sonner";
import { Inter, Instrument_Serif, IBM_Plex_Mono } from 'next/font/google'; import { Instrument_Serif } from 'next/font/google';
import { Analytics } from "@vercel/analytics/react"; import { Analytics } from "@vercel/analytics/react";
import { Providers } from './providers' import { Providers } from './providers'
import { GeistSans } from 'geist/font/sans';
export const metadata: Metadata = { export const metadata: Metadata = {
metadataBase: new URL("https://mplx.run"), metadataBase: new URL("https://mplx.run"),
@ -33,19 +34,12 @@ export const viewport: Viewport = {
minimumScale: 1, minimumScale: 1,
maximumScale: 1, maximumScale: 1,
userScalable: false, userScalable: false,
themeColor: [
{ media: "(prefers-color-scheme: dark)", color: "#000" },
{ media: "(prefers-color-scheme: light)", color: "#fff" },
]
} }
const inter = Inter({
weight: "variable",
subsets: ["latin"],
})
const plexMono = IBM_Plex_Mono({
weight: "400",
subsets: ["latin"],
variable: "--font-mono"
})
const instrumentSerif = Instrument_Serif({ const instrumentSerif = Instrument_Serif({
weight: "400", weight: "400",
subsets: ["latin"], subsets: ["latin"],
@ -59,7 +53,7 @@ export default function RootLayout({
}>) { }>) {
return ( return (
<html lang="en"> <html lang="en">
<body className={`${inter.className} ${instrumentSerif.className} ${plexMono.className}`}> <body className={` ${GeistSans.className} ${instrumentSerif.className}`}>
<Providers> <Providers>
<Toaster position="top-center" richColors /> <Toaster position="top-center" richColors />
{children} {children}

View File

@ -1,25 +0,0 @@
{
"name": "MiniPerplx - AI-powered Search Engine",
"short_name": "MiniPerplx",
"description": "A minimalistic AI-powered search engine that helps you find information on the internet using advanced AI models like GPT-4, Claude, and Grok",
"start_url": "/search",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#000000",
"categories": ["search", "ai", "productivity"],
"icons" : [
{
"src": "/favicon.ico",
"sizes": "any",
"type": "image/x-icon"
}
],
"screenshots": [
{
"src": "/app/opengraph-image.png",
"type": "image/png",
"sizes": "1200x630",
"form_factor": "wide"
}
]
}

26
app/manifest.ts Normal file
View File

@ -0,0 +1,26 @@
import type { MetadataRoute } from 'next'
export default function manifest(): MetadataRoute.Manifest {
return {
name: "MiniPerplx - AI-powered Search Engine",
short_name: "MiniPerplx",
description: "A minimalistic AI-powered search engine that helps you find information on the internet using advanced AI models like GPT-4, Claude, and Grok",
start_url: "/",
display: "standalone",
categories: ["search", "ai", "productivity"],
icons: [
{
src: "/favicon.ico",
sizes: "any",
type: "image/x-icon"
},
],
screenshots: [
{
src: "/opengraph-image.png",
type: "image/png",
sizes: "1200x630",
}
]
}
}

View File

@ -132,7 +132,7 @@ import { vs } from 'react-syntax-highlighter/dist/cjs/styles/prism';
import { useMediaQuery } from '@/hooks/use-media-query'; import { useMediaQuery } from '@/hooks/use-media-query';
import TMDBResult from '@/components/movie-info'; import TMDBResult from '@/components/movie-info';
import TrendingResults from '@/components/trending-tv-movies-results'; import TrendingResults from '@/components/trending-tv-movies-results';
import { GeistMono } from 'geist/font/mono';
export const maxDuration = 60; export const maxDuration = 60;
@ -1083,8 +1083,8 @@ Grok 2 models are now available for you to try out.
if (toolInvocation.toolName === 'thinking_canvas') { if (toolInvocation.toolName === 'thinking_canvas') {
return ( return (
<Card className="my-2 border border-neutral-200 dark:border-neutral-800 shadow-none rounded-xl overflow-hidden"> <Card className="my-2 border border-neutral-200 dark:border-neutral-800 shadow-none rounded-xl overflow-hidden">
<details className="group marker:content-none" open> <details className="group [&>summary::-webkit-details-marker]:hidden [&>summary]:list-none" open>
<summary className="bg-neutral-50 hover:bg-neutral-100 dark:bg-neutral-900 dark:hover:bg-neutral-800 border-b border-neutral-200 dark:border-neutral-800 cursor-pointer select-none list-none"> <summary className="bg-neutral-50 hover:bg-neutral-100 dark:bg-neutral-900 dark:hover:bg-neutral-800 border-b border-neutral-200 dark:border-neutral-800 cursor-pointer select-none">
<CardHeader className="py-2 px-4 flex flex-row items-center justify-between"> <CardHeader className="py-2 px-4 flex flex-row items-center justify-between">
<div className="flex items-center gap-3"> <div className="flex items-center gap-3">
<div className="h-8 w-8 rounded-md border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-950 flex items-center justify-center"> <div className="h-8 w-8 rounded-md border border-neutral-200 dark:border-neutral-800 bg-white dark:bg-neutral-950 flex items-center justify-center">
@ -2141,7 +2141,7 @@ Grok 2 models are now available for you to try out.
</button> </button>
</div> </div>
<div className="overflow-x-auto"> <div className={`overflow-x-auto ${GeistMono.className}`}>
<SyntaxHighlighter <SyntaxHighlighter
language={language || 'text'} language={language || 'text'}
style={theme === 'dark' ? atomDark : vs} style={theme === 'dark' ? atomDark : vs}
@ -2318,7 +2318,7 @@ Grok 2 models are now available for you to try out.
}; };
return ( return (
<div className="markdown-body dark:text-neutral-200"> <div className="markdown-body dark:text-neutral-200 font-sans">
<Marked renderer={renderer}>{content}</Marked> <Marked renderer={renderer}>{content}</Marked>
</div> </div>
); );
@ -2393,7 +2393,7 @@ Grok 2 models are now available for you to try out.
const Navbar: React.FC<NavbarProps> = () => { const Navbar: React.FC<NavbarProps> = () => {
return ( return (
<div className="fixed top-0 left-0 right-0 z-[60] flex justify-between items-center p-4 bg-white dark:bg-neutral-950"> <div className="fixed top-0 left-0 right-0 z-[60] flex justify-between items-center p-4 bg-white dark:bg-neutral-950 font-sans">
<Link href="/new"> <Link href="/new">
<Button <Button
type="button" type="button"
@ -2591,12 +2591,12 @@ Grok 2 models are now available for you to try out.
), [trendingQueries]); ), [trendingQueries]);
return ( return (
<div className="flex flex-col font-sans items-center justify-center p-2 sm:p-4 bg-background text-foreground transition-all duration-500"> <div className="flex flex-col !font-sans items-center justify-center p-2 sm:p-4 bg-background text-foreground transition-all duration-500">
<Navbar /> <Navbar />
<div className={`w-full max-w-[90%] sm:max-w-2xl space-y-6 p-0 ${hasSubmitted ? 'mt-16 sm:mt-20' : 'mt-[20vh] sm:mt-[25vh]'}`}> <div className={`w-full max-w-[90%] !font-sans sm:max-w-2xl space-y-6 p-0 ${hasSubmitted ? 'mt-16 sm:mt-20' : 'mt-[20vh] sm:mt-[25vh]'}`}>
{!hasSubmitted && ( {!hasSubmitted && (
<div className="text-center"> <div className="text-center !font-sans">
<Badge <Badge
onClick={() => setOpenChangelog(true)} onClick={() => setOpenChangelog(true)}
className="cursor-pointer gap-1 mb-2 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200" className="cursor-pointer gap-1 mb-2 bg-green-100 dark:bg-green-900 text-green-800 dark:text-green-200"
@ -2604,10 +2604,7 @@ Grok 2 models are now available for you to try out.
> >
<Flame size={14} /> What&apos;s new <Flame size={14} /> What&apos;s new
</Badge> </Badge>
<h1 className="text-4xl sm:text-6xl mb-1 text-neutral-800 dark:text-neutral-100 font-serif">MiniPerplx</h1> <h1 className="text-4xl sm:text-6xl mb-3 text-neutral-800 dark:text-neutral-100 font-serif">MiniPerplx</h1>
<h2 className='text-xl sm:text-2xl font-serif text-balance text-center mb-2 text-neutral-600 dark:text-neutral-400'>
In search for minimalism and simplicity
</h2>
<div className="flex flex-row items-center gap-1 justify-center text-center mx-auto !p-0 !m-0"> <div className="flex flex-row items-center gap-1 justify-center text-center mx-auto !p-0 !m-0">
<span className="text-base text-neutral-500 dark:text-neutral-400"> <span className="text-base text-neutral-500 dark:text-neutral-400">
Powered by Powered by
@ -2691,7 +2688,7 @@ Grok 2 models are now available for you to try out.
transition={{ duration: 0.5 }} transition={{ duration: 0.5 }}
className="flex items-start space-x-2 mb-4" className="flex items-start space-x-2 mb-4"
> >
<User2 className="size-5 sm:size-6 text-primary flex-shrink-0 mt-1" /> <User2 className="size-5 text-primary flex-shrink-0 mt-1" />
<div className="flex-grow min-w-0"> <div className="flex-grow min-w-0">
{isEditingMessage && editingMessageIndex === index ? ( {isEditingMessage && editingMessageIndex === index ? (
<form onSubmit={handleMessageUpdate} className="flex items-center space-x-2"> <form onSubmit={handleMessageUpdate} className="flex items-center space-x-2">
@ -2720,7 +2717,7 @@ Grok 2 models are now available for you to try out.
</form> </form>
) : ( ) : (
<div> <div>
<p className="text-xl sm:text-2xl font-medium font-serif break-words text-neutral-800 dark:text-neutral-200"> <p className="text-xl font-medium font-sans break-words text-neutral-800 dark:text-neutral-200">
{message.content} {message.content}
</p> </p>
<div className='flex flex-row gap-2'> <div className='flex flex-row gap-2'>
@ -2796,7 +2793,7 @@ Grok 2 models are now available for you to try out.
<Button <Button
key={index} key={index}
variant="ghost" variant="ghost"
className="w-fit font-light rounded-2xl p-1 justify-start text-left h-auto py-2 px-4 bg-neutral-100 dark:bg-neutral-800 text-neutral-900 dark:text-neutral-100 hover:bg-neutral-200 dark:hover:bg-neutral-700 whitespace-normal" className="w-fit font-medium rounded-2xl p-1 justify-start text-left h-auto py-2 px-4 bg-neutral-100 dark:bg-neutral-800 text-neutral-900 dark:text-neutral-100 hover:bg-neutral-200 dark:hover:bg-neutral-700 whitespace-normal"
onClick={() => handleSuggestedQuestionClick(question)} onClick={() => handleSuggestedQuestionClick(question)}
> >
{question} {question}
@ -2884,15 +2881,22 @@ Grok 2 models are now available for you to try out.
} }
const LoadingFallback = () => ( const LoadingFallback = () => (
<div className="flex flex-col items-center justify-center min-h-screen bg-white dark:bg-neutral-900 text-neutral-900 dark:text-neutral-100"> <div className="flex flex-col items-center justify-center min-h-screen bg-gradient-to-br from-white to-neutral-100 dark:from-neutral-900 dark:to-black">
<div className="text-center space-y-4"> <div className="backdrop-blur-xl bg-white/30 dark:bg-neutral-900/30 p-8 rounded-2xl border border-neutral-200/20 dark:border-neutral-700/20 shadow-xl">
<h1 className="text-4xl sm:text-6xl mb-1 text-neutral-800 dark:text-neutral-100 font-serif animate-pulse"> <div className="text-center space-y-6">
MiniPerplx <h1 className="text-4xl sm:text-6xl font-bold bg-clip-text text-transparent bg-gradient-to-r from-neutral-900 to-neutral-600 dark:from-white dark:to-neutral-400">
</h1> MiniPerplx
<p className="text-xl sm:text-2xl font-serif text-neutral-600 dark:text-neutral-400 animate-pulse"> </h1>
Loading your minimalist AI experience... <p className="text-base sm:text-lg text-neutral-600 dark:text-neutral-400">
</p> Loading your minimalist AI experience
<Loader2 className="w-10 h-10 text-primary mx-auto animate-spin" /> <span className="animate-pulse">...</span>
</p>
<div className="relative">
<div className="h-1 w-32 mx-auto bg-neutral-200 dark:bg-neutral-800 rounded-full overflow-hidden">
<div className="h-full bg-primary w-1/2 animate-[loader_1s_ease-in-out_infinite] rounded-full" />
</div>
</div>
</div>
</div> </div>
</div> </div>
); );

View File

@ -64,7 +64,7 @@ export function InstallPrompt() {
switch (platform) { switch (platform) {
case 'ios': case 'ios':
return ( return (
<p className="text-lg text-neutral-600 dark:text-neutral-400"> <p className="text-neutral-600 dark:text-neutral-400">
Tap <Share className="inline h-4 w-4 mx-1" /> and then{" "} Tap <Share className="inline h-4 w-4 mx-1" /> and then{" "}
<span className="whitespace-nowrap"> <span className="whitespace-nowrap">
&ldquo;Add to Home Screen&rdquo; <Plus className="inline h-4 w-4 ml-1" /> &ldquo;Add to Home Screen&rdquo; <Plus className="inline h-4 w-4 ml-1" />
@ -73,13 +73,13 @@ export function InstallPrompt() {
); );
case 'android': case 'android':
return ( return (
<p className="text-lg text-neutral-600 dark:text-neutral-400"> <p className="text-neutral-600 dark:text-neutral-400">
Tap the menu <span className="font-bold"></span> and select &ldquo;Install app&rdquo; Tap the menu <span className="font-bold"></span> and select &ldquo;Install app&rdquo;
</p> </p>
); );
default: default:
return ( return (
<p className="text-lg text-neutral-600 dark:text-neutral-400"> <p className="text-neutral-600 dark:text-neutral-400">
Install our app for a better experience <Download className="inline h-4 w-4 ml-1" /> Install our app for a better experience <Download className="inline h-4 w-4 ml-1" />
</p> </p>
); );
@ -98,7 +98,7 @@ export function InstallPrompt() {
<Card className="p-4 bg-white dark:bg-neutral-900 border border-neutral-200 dark:border-neutral-800 shadow-lg"> <Card className="p-4 bg-white dark:bg-neutral-900 border border-neutral-200 dark:border-neutral-800 shadow-lg">
<div className="flex items-start justify-between"> <div className="flex items-start justify-between">
<div className="space-y-2"> <div className="space-y-2">
<h3 className="font-medium text-2xl text-neutral-900 dark:text-neutral-100"> <h3 className="font-medium text-xl text-neutral-900 dark:text-neutral-100">
Install MiniPerplx Install MiniPerplx
</h3> </h3>
{getInstructions()} {getInstructions()}

View File

@ -559,7 +559,7 @@ const GroupSelector = ({ selectedGroup, onGroupSelect }: GroupSelectorProps) =>
align="start" align="start"
sideOffset={8} sideOffset={8}
className={cn( className={cn(
"w-[400px] font-sans z-[60] -ml-2 mt-1", "w-[420px] font-sans z-[60] -ml-2 mt-1",
"border border-neutral-200 dark:border-neutral-800", "border border-neutral-200 dark:border-neutral-800",
"bg-white dark:bg-neutral-900", "bg-white dark:bg-neutral-900",
"shadow-lg rounded-lg" "shadow-lg rounded-lg"
@ -629,12 +629,10 @@ const FormComponent: React.FC<FormComponentProps> = ({
const handleGroupSelect = useCallback((group: SearchGroup) => { const handleGroupSelect = useCallback((group: SearchGroup) => {
setSelectedGroup(group.id); setSelectedGroup(group.id);
setInput('');
resetSuggestedQuestions(); resetSuggestedQuestions();
inputRef.current?.focus(); inputRef.current?.focus();
}, [setSelectedGroup, setInput, resetSuggestedQuestions, inputRef]); }, [setSelectedGroup, resetSuggestedQuestions, inputRef]);
// Keep existing file upload and form submission logic...
const uploadFile = async (file: File): Promise<Attachment> => { const uploadFile = async (file: File): Promise<Attachment> => {
const formData = new FormData(); const formData = new FormData();
formData.append('file', file); formData.append('file', file);
@ -736,7 +734,7 @@ const FormComponent: React.FC<FormComponentProps> = ({
return ( return (
<div className={cn( <div className={cn(
"relative w-full flex flex-col gap-2 rounded-lg transition-all duration-300", "relative w-full flex flex-col gap-2 rounded-lg transition-all duration-300 !font-sans",
hasSubmitted ?? "z-[51]", hasSubmitted ?? "z-[51]",
attachments.length > 0 || uploadQueue.length > 0 attachments.length > 0 || uploadQueue.length > 0
? "bg-gray-100/70 dark:bg-neutral-800 p-1" ? "bg-gray-100/70 dark:bg-neutral-800 p-1"

View File

@ -1,5 +1,6 @@
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = { const nextConfig = {
transpilePackages: ["geist"],
async headers() { async headers() {
return [ return [
{ {

View File

@ -51,6 +51,7 @@
"embla-carousel-react": "^8.3.0", "embla-carousel-react": "^8.3.0",
"exa-js": "^1.3.3", "exa-js": "^1.3.3",
"framer-motion": "^11.3.19", "framer-motion": "^11.3.19",
"geist": "^1.3.1",
"google-auth-library": "^9.14.1", "google-auth-library": "^9.14.1",
"highlight.js": "^11.10.0", "highlight.js": "^11.10.0",
"katex": "^0.16.11", "katex": "^0.16.11",
@ -59,7 +60,7 @@
"mapbox-gl": "^3.7.0", "mapbox-gl": "^3.7.0",
"marked-react": "^2.0.0", "marked-react": "^2.0.0",
"motion": "^11.13.5", "motion": "^11.13.5",
"next": "^14.2.20", "next": "^14.2.21",
"next-themes": "^0.3.0", "next-themes": "^0.3.0",
"openai": "^4.56.0", "openai": "^4.56.0",
"posthog-js": "^1.202.2", "posthog-js": "^1.202.2",

View File

@ -88,7 +88,7 @@ dependencies:
version: 1.34.2 version: 1.34.2
'@vercel/analytics': '@vercel/analytics':
specifier: ^1.3.1 specifier: ^1.3.1
version: 1.3.1(next@14.2.20)(react@18.3.1) version: 1.3.1(next@14.2.21)(react@18.3.1)
'@vercel/blob': '@vercel/blob':
specifier: ^0.23.4 specifier: ^0.23.4
version: 0.23.4 version: 0.23.4
@ -131,6 +131,9 @@ dependencies:
framer-motion: framer-motion:
specifier: ^11.3.19 specifier: ^11.3.19
version: 11.11.2(react-dom@18.3.1)(react@18.3.1) version: 11.11.2(react-dom@18.3.1)(react@18.3.1)
geist:
specifier: ^1.3.1
version: 1.3.1(next@14.2.21)
google-auth-library: google-auth-library:
specifier: ^9.14.1 specifier: ^9.14.1
version: 9.14.1 version: 9.14.1
@ -156,8 +159,8 @@ dependencies:
specifier: ^11.13.5 specifier: ^11.13.5
version: 11.13.5(react-dom@18.3.1)(react@18.3.1) version: 11.13.5(react-dom@18.3.1)(react@18.3.1)
next: next:
specifier: ^14.2.20 specifier: ^14.2.21
version: 14.2.20(react-dom@18.3.1)(react@18.3.1) version: 14.2.21(react-dom@18.3.1)(react@18.3.1)
next-themes: next-themes:
specifier: ^0.3.0 specifier: ^0.3.0
version: 0.3.0(react-dom@18.3.1)(react@18.3.1) version: 0.3.0(react-dom@18.3.1)(react@18.3.1)
@ -629,8 +632,8 @@ packages:
- ws - ws
dev: false dev: false
/@next/env@14.2.20: /@next/env@14.2.21:
resolution: {integrity: sha512-JfDpuOCB0UBKlEgEy/H6qcBSzHimn/YWjUHzKl1jMeUO+QVRdzmTTl8gFJaNO87c8DXmVKhFCtwxQ9acqB3+Pw==} resolution: {integrity: sha512-lXcwcJd5oR01tggjWJ6SrNNYFGuOOMB9c251wUNkjCpkoXOPkDeF/15c3mnVlBqrW4JJXb2kVxDFhC4GduJt2A==}
dev: false dev: false
/@next/eslint-plugin-next@14.2.5: /@next/eslint-plugin-next@14.2.5:
@ -639,8 +642,8 @@ packages:
glob: 10.3.10 glob: 10.3.10
dev: true dev: true
/@next/swc-darwin-arm64@14.2.20: /@next/swc-darwin-arm64@14.2.21:
resolution: {integrity: sha512-WDfq7bmROa5cIlk6ZNonNdVhKmbCv38XteVFYsxea1vDJt3SnYGgxLGMTXQNfs5OkFvAhmfKKrwe7Y0Hs+rWOg==} resolution: {integrity: sha512-HwEjcKsXtvszXz5q5Z7wCtrHeTTDSTgAbocz45PHMUjU3fBYInfvhR+ZhavDRUYLonm53aHZbB09QtJVJj8T7g==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
@ -648,8 +651,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-darwin-x64@14.2.20: /@next/swc-darwin-x64@14.2.21:
resolution: {integrity: sha512-XIQlC+NAmJPfa2hruLvr1H1QJJeqOTDV+v7tl/jIdoFvqhoihvSNykLU/G6NMgoeo+e/H7p/VeWSOvMUHKtTIg==} resolution: {integrity: sha512-TSAA2ROgNzm4FhKbTbyJOBrsREOMVdDIltZ6aZiKvCi/v0UwFmwigBGeqXDA97TFMpR3LNNpw52CbVelkoQBxA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
@ -657,8 +660,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-linux-arm64-gnu@14.2.20: /@next/swc-linux-arm64-gnu@14.2.21:
resolution: {integrity: sha512-pnzBrHTPXIMm5QX3QC8XeMkpVuoAYOmyfsO4VlPn+0NrHraNuWjdhe+3xLq01xR++iCvX+uoeZmJDKcOxI201Q==} resolution: {integrity: sha512-0Dqjn0pEUz3JG+AImpnMMW/m8hRtl1GQCNbO66V1yp6RswSTiKmnHf3pTX6xMdJYSemf3O4Q9ykiL0jymu0TuA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@ -666,8 +669,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-linux-arm64-musl@14.2.20: /@next/swc-linux-arm64-musl@14.2.21:
resolution: {integrity: sha512-WhJJAFpi6yqmUx1momewSdcm/iRXFQS0HU2qlUGlGE/+98eu7JWLD5AAaP/tkK1mudS/rH2f9E3WCEF2iYDydQ==} resolution: {integrity: sha512-Ggfw5qnMXldscVntwnjfaQs5GbBbjioV4B4loP+bjqNEb42fzZlAaK+ldL0jm2CTJga9LynBMhekNfV8W4+HBw==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
@ -675,8 +678,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-linux-x64-gnu@14.2.20: /@next/swc-linux-x64-gnu@14.2.21:
resolution: {integrity: sha512-ao5HCbw9+iG1Kxm8XsGa3X174Ahn17mSYBQlY6VGsdsYDAbz/ZP13wSLfvlYoIDn1Ger6uYA+yt/3Y9KTIupRg==} resolution: {integrity: sha512-uokj0lubN1WoSa5KKdThVPRffGyiWlm/vCc/cMkWOQHw69Qt0X1o3b2PyLLx8ANqlefILZh1EdfLRz9gVpG6tg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@ -684,8 +687,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-linux-x64-musl@14.2.20: /@next/swc-linux-x64-musl@14.2.21:
resolution: {integrity: sha512-CXm/kpnltKTT7945np6Td3w7shj/92TMRPyI/VvveFe8+YE+/YOJ5hyAWK5rpx711XO1jBCgXl211TWaxOtkaA==} resolution: {integrity: sha512-iAEBPzWNbciah4+0yI4s7Pce6BIoxTQ0AGCkxn/UBuzJFkYyJt71MadYQkjPqCQCJAFQ26sYh7MOKdU+VQFgPg==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
@ -693,8 +696,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-win32-arm64-msvc@14.2.20: /@next/swc-win32-arm64-msvc@14.2.21:
resolution: {integrity: sha512-upJn2HGQgKNDbXVfIgmqT2BN8f3z/mX8ddoyi1I565FHbfowVK5pnMEwauvLvaJf4iijvuKq3kw/b6E9oIVRWA==} resolution: {integrity: sha512-plykgB3vL2hB4Z32W3ktsfqyuyGAPxqwiyrAi2Mr8LlEUhNn9VgkiAl5hODSBpzIfWweX3er1f5uNpGDygfQVQ==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
@ -702,8 +705,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-win32-ia32-msvc@14.2.20: /@next/swc-win32-ia32-msvc@14.2.21:
resolution: {integrity: sha512-igQW/JWciTGJwj3G1ipalD2V20Xfx3ywQy17IV0ciOUBbFhNfyU1DILWsTi32c8KmqgIDviUEulW/yPb2FF90w==} resolution: {integrity: sha512-w5bacz4Vxqrh06BjWgua3Yf7EMDb8iMcVhNrNx8KnJXt8t+Uu0Zg4JHLDL/T7DkTCEEfKXO/Er1fcfWxn2xfPA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
@ -711,8 +714,8 @@ packages:
dev: false dev: false
optional: true optional: true
/@next/swc-win32-x64-msvc@14.2.20: /@next/swc-win32-x64-msvc@14.2.21:
resolution: {integrity: sha512-AFmqeLW6LtxeFTuoB+MXFeM5fm5052i3MU6xD0WzJDOwku6SkZaxb1bxjBaRC8uNqTRTSPl0yMFtjNowIVI67w==} resolution: {integrity: sha512-sT6+llIkzpsexGYZq8cjjthRyRGe5cJVhqh12FmlbxHqna6zsDDK8UNaV7g41T6atFHCJUPeLb3uyAwrBwy0NA==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@ -1953,7 +1956,7 @@ packages:
crypto-js: 4.2.0 crypto-js: 4.2.0
dev: false dev: false
/@vercel/analytics@1.3.1(next@14.2.20)(react@18.3.1): /@vercel/analytics@1.3.1(next@14.2.21)(react@18.3.1):
resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==} resolution: {integrity: sha512-xhSlYgAuJ6Q4WQGkzYTLmXwhYl39sWjoMA3nHxfkvG+WdBT25c563a7QhwwKivEOZtPJXifYHR1m2ihoisbWyA==}
peerDependencies: peerDependencies:
next: '>= 13' next: '>= 13'
@ -1964,7 +1967,7 @@ packages:
react: react:
optional: true optional: true
dependencies: dependencies:
next: 14.2.20(react-dom@18.3.1)(react@18.3.1) next: 14.2.21(react-dom@18.3.1)(react@18.3.1)
react: 18.3.1 react: 18.3.1
server-only: 0.0.1 server-only: 0.0.1
dev: false dev: false
@ -3590,6 +3593,14 @@ packages:
- supports-color - supports-color
dev: false dev: false
/geist@1.3.1(next@14.2.21):
resolution: {integrity: sha512-Q4gC1pBVPN+D579pBaz0TRRnGA4p9UK6elDY/xizXdFk/g4EKR5g0I+4p/Kj6gM0SajDBZ/0FvDV9ey9ud7BWw==}
peerDependencies:
next: '>=13.2.0'
dependencies:
next: 14.2.21(react-dom@18.3.1)(react@18.3.1)
dev: false
/geojson-vt@4.0.2: /geojson-vt@4.0.2:
resolution: {integrity: sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==} resolution: {integrity: sha512-AV9ROqlNqoZEIJGfm1ncNjEXfkz2hdFlZf0qkVfmkwdKa8vj7H16YUOT81rJw1rdFhyEDlN2Tds91p/glzbl5A==}
dev: false dev: false
@ -5104,8 +5115,8 @@ packages:
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
dev: false dev: false
/next@14.2.20(react-dom@18.3.1)(react@18.3.1): /next@14.2.21(react-dom@18.3.1)(react@18.3.1):
resolution: {integrity: sha512-yPvIiWsiyVYqJlSQxwmzMIReXn5HxFNq4+tlVQ812N1FbvhmE+fDpIAD7bcS2mGYQwPJ5vAsQouyme2eKsxaug==} resolution: {integrity: sha512-rZmLwucLHr3/zfDMYbJXbw0ZeoBpirxkXuvsJbk7UPorvPYZhP7vq7aHbKnU7dQNCYIimRrbB2pp3xmf+wsYUg==}
engines: {node: '>=18.17.0'} engines: {node: '>=18.17.0'}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@ -5122,7 +5133,7 @@ packages:
sass: sass:
optional: true optional: true
dependencies: dependencies:
'@next/env': 14.2.20 '@next/env': 14.2.21
'@swc/helpers': 0.5.5 '@swc/helpers': 0.5.5
busboy: 1.6.0 busboy: 1.6.0
caniuse-lite: 1.0.30001667 caniuse-lite: 1.0.30001667
@ -5132,15 +5143,15 @@ packages:
react-dom: 18.3.1(react@18.3.1) react-dom: 18.3.1(react@18.3.1)
styled-jsx: 5.1.1(react@18.3.1) styled-jsx: 5.1.1(react@18.3.1)
optionalDependencies: optionalDependencies:
'@next/swc-darwin-arm64': 14.2.20 '@next/swc-darwin-arm64': 14.2.21
'@next/swc-darwin-x64': 14.2.20 '@next/swc-darwin-x64': 14.2.21
'@next/swc-linux-arm64-gnu': 14.2.20 '@next/swc-linux-arm64-gnu': 14.2.21
'@next/swc-linux-arm64-musl': 14.2.20 '@next/swc-linux-arm64-musl': 14.2.21
'@next/swc-linux-x64-gnu': 14.2.20 '@next/swc-linux-x64-gnu': 14.2.21
'@next/swc-linux-x64-musl': 14.2.20 '@next/swc-linux-x64-musl': 14.2.21
'@next/swc-win32-arm64-msvc': 14.2.20 '@next/swc-win32-arm64-msvc': 14.2.21
'@next/swc-win32-ia32-msvc': 14.2.20 '@next/swc-win32-ia32-msvc': 14.2.21
'@next/swc-win32-x64-msvc': 14.2.20 '@next/swc-win32-x64-msvc': 14.2.21
transitivePeerDependencies: transitivePeerDependencies:
- '@babel/core' - '@babel/core'
- babel-plugin-macros - babel-plugin-macros

View File

@ -23,9 +23,9 @@ const config = {
'screen-small': '100svh', 'screen-small': '100svh',
}, },
fontFamily: { fontFamily: {
sans: ['Inter', 'sans-serif'], sans: ['var(--font-geist-sans)'],
serif: ['var(--font-serif)', 'serif'], serif: ['var(--font-serif)'],
mono: ['var(--font-mono)', 'monospace'], mono: ['var(--font-geist-mono)'],
}, },
colors: { colors: {
border: "hsl(var(--border))", border: "hsl(var(--border))",