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.
#### 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.
#### 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:
- Use this Python-only sandbox for calculations, data analysis, or visualizations.
@ -185,8 +187,9 @@ const groupPrompts = {
- Only use the text_translate tool for user-requested translations.
#### 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:
- Analyze image details to determine tool parameters.
@ -196,9 +199,9 @@ const groupPrompts = {
### Prohibited Actions:
- 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).
- Avoid GUI-based Python code.
- Avoid running GUI-based Python code in the programming tool.
- Do not run 'web_search' for stock queries.
### Citations Rules:

View File

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

View File

@ -3,9 +3,10 @@ import 'katex/dist/katex.min.css';
import 'mapbox-gl/dist/mapbox-gl.css';
import { Metadata, Viewport } from "next";
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 { Providers } from './providers'
import { GeistSans } from 'geist/font/sans';
export const metadata: Metadata = {
metadataBase: new URL("https://mplx.run"),
@ -33,19 +34,12 @@ export const viewport: Viewport = {
minimumScale: 1,
maximumScale: 1,
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({
weight: "400",
subsets: ["latin"],
@ -59,7 +53,7 @@ export default function RootLayout({
}>) {
return (
<html lang="en">
<body className={`${inter.className} ${instrumentSerif.className} ${plexMono.className}`}>
<body className={` ${GeistSans.className} ${instrumentSerif.className}`}>
<Providers>
<Toaster position="top-center" richColors />
{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 TMDBResult from '@/components/movie-info';
import TrendingResults from '@/components/trending-tv-movies-results';
import { GeistMono } from 'geist/font/mono';
export const maxDuration = 60;
@ -1083,8 +1083,8 @@ Grok 2 models are now available for you to try out.
if (toolInvocation.toolName === 'thinking_canvas') {
return (
<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>
<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">
<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">
<CardHeader className="py-2 px-4 flex flex-row items-center justify-between">
<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">
@ -2141,7 +2141,7 @@ Grok 2 models are now available for you to try out.
</button>
</div>
<div className="overflow-x-auto">
<div className={`overflow-x-auto ${GeistMono.className}`}>
<SyntaxHighlighter
language={language || 'text'}
style={theme === 'dark' ? atomDark : vs}
@ -2318,7 +2318,7 @@ Grok 2 models are now available for you to try out.
};
return (
<div className="markdown-body dark:text-neutral-200">
<div className="markdown-body dark:text-neutral-200 font-sans">
<Marked renderer={renderer}>{content}</Marked>
</div>
);
@ -2393,7 +2393,7 @@ Grok 2 models are now available for you to try out.
const Navbar: React.FC<NavbarProps> = () => {
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">
<Button
type="button"
@ -2591,12 +2591,12 @@ Grok 2 models are now available for you to try out.
), [trendingQueries]);
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 />
<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 && (
<div className="text-center">
<div className="text-center !font-sans">
<Badge
onClick={() => setOpenChangelog(true)}
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
</Badge>
<h1 className="text-4xl sm:text-6xl mb-1 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>
<h1 className="text-4xl sm:text-6xl mb-3 text-neutral-800 dark:text-neutral-100 font-serif">MiniPerplx</h1>
<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">
Powered by
@ -2691,7 +2688,7 @@ Grok 2 models are now available for you to try out.
transition={{ duration: 0.5 }}
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">
{isEditingMessage && editingMessageIndex === index ? (
<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>
) : (
<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}
</p>
<div className='flex flex-row gap-2'>
@ -2796,7 +2793,7 @@ Grok 2 models are now available for you to try out.
<Button
key={index}
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)}
>
{question}
@ -2884,15 +2881,22 @@ Grok 2 models are now available for you to try out.
}
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="text-center space-y-4">
<h1 className="text-4xl sm:text-6xl mb-1 text-neutral-800 dark:text-neutral-100 font-serif animate-pulse">
MiniPerplx
</h1>
<p className="text-xl sm:text-2xl font-serif text-neutral-600 dark:text-neutral-400 animate-pulse">
Loading your minimalist AI experience...
</p>
<Loader2 className="w-10 h-10 text-primary mx-auto animate-spin" />
<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="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">
<div className="text-center space-y-6">
<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">
MiniPerplx
</h1>
<p className="text-base sm:text-lg text-neutral-600 dark:text-neutral-400">
Loading your minimalist AI experience
<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>
);

View File

@ -64,7 +64,7 @@ export function InstallPrompt() {
switch (platform) {
case 'ios':
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{" "}
<span className="whitespace-nowrap">
&ldquo;Add to Home Screen&rdquo; <Plus className="inline h-4 w-4 ml-1" />
@ -73,13 +73,13 @@ export function InstallPrompt() {
);
case 'android':
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;
</p>
);
default:
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" />
</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">
<div className="flex items-start justify-between">
<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
</h3>
{getInstructions()}

View File

@ -559,7 +559,7 @@ const GroupSelector = ({ selectedGroup, onGroupSelect }: GroupSelectorProps) =>
align="start"
sideOffset={8}
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",
"bg-white dark:bg-neutral-900",
"shadow-lg rounded-lg"
@ -629,12 +629,10 @@ const FormComponent: React.FC<FormComponentProps> = ({
const handleGroupSelect = useCallback((group: SearchGroup) => {
setSelectedGroup(group.id);
setInput('');
resetSuggestedQuestions();
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 formData = new FormData();
formData.append('file', file);
@ -736,7 +734,7 @@ const FormComponent: React.FC<FormComponentProps> = ({
return (
<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]",
attachments.length > 0 || uploadQueue.length > 0
? "bg-gray-100/70 dark:bg-neutral-800 p-1"

View File

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

View File

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

View File

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

View File

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