Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .changeset/socials-and-nav-links.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
"@inkeep/open-knowledge": patch
---

Refresh social links and resource navigation across the app and docs site:

- The editor's Resources popover drops the standalone "Website" row and adds an "Open Knowledge" entry (brand logo, desaturated to sit with the monochrome icons and regaining color on hover) as the last item.
- The docs site nav gains brand icons for GitHub and Discord, with X rendered icon-only (its label preserved as the accessible name).
- Social links now point at the Open Knowledge handle (`x.com/OpenKnowledgeAI`) and the project Discord, replacing the legacy Inkeep X/LinkedIn destinations in the footer and structured-data `sameAs`.
- The home hero and bottom call-to-action add a subtle "or CLI" link beside the macOS download button, pointing at the CLI reference.
6 changes: 3 additions & 3 deletions docs/src/app/(home)/footer.tsx
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
import Link from 'next/link';
import { DiscordIcon } from '@/components/icons/discord';
import { GitHubIcon } from '@/components/icons/github';
import { LinkedInIcon } from '@/components/icons/linkedin';
import { XIcon } from '@/components/icons/x';
import { InkeepWordmark } from '@/components/inkeep-wordmark';

const socialLinks = [
{ href: 'https://github.com/inkeep/open-knowledge', label: 'GitHub', Icon: GitHubIcon },
{ href: 'https://www.linkedin.com/company/inkeep/', label: 'LinkedIn', Icon: LinkedInIcon },
{ href: 'https://x.com/inkeep', label: 'X', Icon: XIcon },
{ href: 'https://discord.com/invite/YujKpFN49', label: 'Discord', Icon: DiscordIcon },
{ href: 'https://x.com/OpenKnowledgeAI', label: 'X', Icon: XIcon },
];

const legalLinks = [
Expand Down
10 changes: 7 additions & 3 deletions docs/src/app/(home)/sections/call-to-action.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use client';

import Image from 'next/image';
import Link from 'next/link';
import { useEffect, useState } from 'react';
import { DOWNLOAD_URL } from '@/lib/site';
import { useIsInView } from '@/lib/use-is-in-view';
Expand Down Expand Up @@ -102,9 +103,6 @@ export function CallToAction() {
</SectionHeading>

<div className="mt-10 flex flex-wrap items-center justify-center gap-5">
<MarketingButton href="/docs" variant="minimal" size="lg">
Read the docs
</MarketingButton>
<MarketingButton
href={DOWNLOAD_URL}
target="_blank"
Expand All @@ -114,6 +112,12 @@ export function CallToAction() {
>
Download for macOS
</MarketingButton>
<Link
href="/docs/reference/cli"
className="font-mono text-base text-slide-muted underline-offset-4 transition-colors hover:text-slide-text hover:underline"
>
or CLI
</Link>
</div>
</div>
</div>
Expand Down
9 changes: 8 additions & 1 deletion docs/src/app/(home)/sections/hero.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
'use client';

import Image from 'next/image';
import Link from 'next/link';
import { useState } from 'react';
import { ClaudeIcon } from '@/components/icons/claude';
import { CodexBrandIcon } from '@/components/icons/codex';
Expand Down Expand Up @@ -43,7 +44,7 @@ export function Hero() {
Beautiful, AI-native markdown editor.
</SectionHeading>

<div className="mt-6">
<div className="mt-6 flex items-center justify-center gap-4">
<MarketingButton
href={DOWNLOAD_URL}
target="_blank"
Expand All @@ -53,6 +54,12 @@ export function Hero() {
>
Download for macOS
</MarketingButton>
<Link
href="/docs/reference/cli"
className="font-mono text-sm text-slide-muted underline-offset-4 transition-colors hover:text-slide-text hover:underline"
>
or CLI
</Link>
</div>

<div className="mt-16 flex justify-center">
Expand Down
84 changes: 66 additions & 18 deletions docs/src/app/(home)/site-nav.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,44 @@

import { Menu, X } from 'lucide-react';
import Link from 'next/link';
import type { FC, SVGProps } from 'react';
import { useEffect, useRef, useState } from 'react';
import { DiscordIcon } from '@/components/icons/discord';
import { GitHubIcon } from '@/components/icons/github';
import { XIcon } from '@/components/icons/x';
import { OkWordmark } from '@/components/ok-wordmark';
import { DOWNLOAD_URL } from '@/lib/site';
import { MarketingButton } from './marketing-button';

const navLinks = [
type NavLink = {
href: string;
label: string;
external: boolean;
icon?: FC<SVGProps<SVGSVGElement>>;
iconOnly?: boolean;
};

const navLinks: NavLink[] = [
{ href: '/docs', label: 'Docs', external: false },
{ href: 'https://github.com/inkeep/open-knowledge', label: 'GitHub', external: true },
{
href: 'https://github.com/inkeep/open-knowledge',
label: 'GitHub',
external: true,
icon: GitHubIcon,
},
{
href: 'https://discord.com/invite/YujKpFN49',
label: 'Discord',
external: true,
icon: DiscordIcon,
},
{
href: 'https://x.com/OpenKnowledgeAI',
label: 'X',
external: true,
icon: XIcon,
iconOnly: true,
},
];

const FOCUSABLE_SELECTOR = 'a[href], button:not([disabled]), [tabindex]:not([tabindex="-1"])';
Expand Down Expand Up @@ -66,27 +96,36 @@ export function SiteNav() {
</Link>

<nav className="hidden items-center gap-6 text-sm text-slide-muted md:flex uppercase font-mono">
{navLinks.map((link) =>
link.external ? (
{navLinks.map((link) => {
const Icon = link.icon;
const content = (
<>
{Icon ? <Icon className="size-4 shrink-0" aria-hidden="true" /> : null}
{link.iconOnly ? null : link.label}
</>
);
return link.external ? (
<a
key={link.href}
href={link.href}
target="_blank"
rel="noreferrer"
className="transition-colors hover:text-slide-text"
aria-label={link.iconOnly ? link.label : undefined}
className="inline-flex items-center gap-1.5 transition-colors hover:text-slide-text"
>
{link.label}
{content}
</a>
) : (
<Link
key={link.href}
href={link.href}
className="transition-colors hover:text-slide-text"
aria-label={link.iconOnly ? link.label : undefined}
className="inline-flex items-center gap-1.5 transition-colors hover:text-slide-text"
>
{link.label}
{content}
</Link>
),
)}
);
})}
<MarketingButton href={DOWNLOAD_URL} size="sm">
Download
</MarketingButton>
Expand Down Expand Up @@ -116,27 +155,36 @@ export function SiteNav() {
className="border-t bg-fd-background md:hidden"
>
<nav className="container mx-auto flex flex-col gap-1 px-6 py-4 text-base uppercase font-mono">
{navLinks.map((link) =>
link.external ? (
{navLinks.map((link) => {
const Icon = link.icon;
const content = (
<>
{Icon ? <Icon className="size-4 shrink-0" aria-hidden="true" /> : null}
{link.iconOnly ? null : link.label}
</>
);
return link.external ? (
<a
key={link.href}
href={link.href}
target="_blank"
rel="noreferrer"
className="rounded-md px-3 py-2 text-slide-text transition-colors hover:bg-slide-bg-elevated"
aria-label={link.iconOnly ? link.label : undefined}
className="flex items-center gap-2 rounded-md px-3 py-2 text-slide-text transition-colors hover:bg-slide-bg-elevated"
>
{link.label}
{content}
</a>
) : (
<Link
key={link.href}
href={link.href}
className="rounded-md px-3 py-2 text-slide-text transition-colors hover:bg-slide-bg-elevated"
aria-label={link.iconOnly ? link.label : undefined}
className="flex items-center gap-2 rounded-md px-3 py-2 text-slide-text transition-colors hover:bg-slide-bg-elevated"
>
{link.label}
{content}
</Link>
),
)}
);
})}
<MarketingButton href={DOWNLOAD_URL} size="md" className="text-base" showIcon>
Download
</MarketingButton>
Expand Down
8 changes: 1 addition & 7 deletions docs/src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,7 @@ const orgLd = {
description:
'Ship Agent-powered assistants and automations that boost customer experience and 10x your teams.',
foundingDate: '2023',
sameAs: [
'https://x.com/inkeep',
'https://linkedin.com/company/inkeep',
'https://github.com/inkeep',
'https://crunchbase.com/organization/inkeep',
'https://youtube.com/@inkeep-ai',
],
sameAs: ['https://x.com/OpenKnowledgeAI', 'https://github.com/inkeep/open-knowledge'],
} satisfies WithContext<Organization>;

const siteLd = {
Expand Down
17 changes: 17 additions & 0 deletions docs/src/components/icons/discord.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import type { SVGProps } from 'react';

export function DiscordIcon(props: SVGProps<SVGSVGElement>) {
return (
<svg
aria-hidden="true"
fill="currentColor"
height={24}
width={24}
viewBox="0 0 24 24"
xmlns="http://www.w3.org/2000/svg"
{...props}
>
<path d="M20.317 4.3698a19.7913 19.7913 0 00-4.8851-1.5152.0741.0741 0 00-.0785.0371c-.211.3753-.4447.8648-.6083 1.2495-1.8447-.2762-3.68-.2762-5.4868 0-.1636-.3933-.4058-.8742-.6177-1.2495a.077.077 0 00-.0785-.037 19.7363 19.7363 0 00-4.8852 1.515.0699.0699 0 00-.0321.0277C.5334 9.0458-.319 13.5799.0992 18.0578a.0824.0824 0 00.0312.0561c2.0528 1.5076 4.0413 2.4228 5.9929 3.0294a.0777.0777 0 00.0842-.0276c.4616-.6304.8731-1.2952 1.226-1.9942a.076.076 0 00-.0416-.1057c-.6528-.2476-1.2743-.5495-1.8722-.8923a.077.077 0 01-.0076-.1277c.1258-.0943.2517-.1923.3718-.2914a.0743.0743 0 01.0776-.0105c3.9278 1.7933 8.18 1.7933 12.0614 0a.0739.0739 0 01.0785.0095c.1202.099.246.1981.3728.2924a.077.077 0 01-.0066.1276 12.2986 12.2986 0 01-1.873.8914.0766.0766 0 00-.0407.1067c.3604.698.7719 1.3628 1.225 1.9932a.076.076 0 00.0842.0286c1.961-.6067 3.9495-1.5219 6.0023-3.0294a.077.077 0 00.0313-.0552c.5004-5.177-.8382-9.6739-3.5485-13.6604a.061.061 0 00-.0312-.0286zM8.02 15.3312c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9555-2.4189 2.157-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9555 2.4189-2.1569 2.4189zm7.9748 0c-1.1825 0-2.1569-1.0857-2.1569-2.419 0-1.3332.9554-2.4189 2.1569-2.4189 1.2108 0 2.1757 1.0952 2.1568 2.419 0 1.3332-.9554 2.4189-2.1568 2.4189Z" />
</svg>
);
}
20 changes: 0 additions & 20 deletions docs/src/components/icons/linkedin.tsx

This file was deleted.

14 changes: 7 additions & 7 deletions packages/app/src/components/HelpPopover.dom.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ describe('HelpPopover runtime behavior', () => {
})),
).toEqual([
{
label: 'Documentation',
label: 'Docs',
href: 'https://openknowledge.ai/docs',
target: '_blank',
rel: 'noopener noreferrer',
Expand All @@ -81,22 +81,22 @@ describe('HelpPopover runtime behavior', () => {
hasIcon: true,
},
{
label: 'Website',
href: 'https://openknowledge.ai/',
label: 'Discord',
href: 'https://discord.com/invite/YujKpFN49',
target: '_blank',
rel: 'noopener noreferrer',
hasIcon: true,
},
{
label: 'Discord',
href: 'https://discord.com/invite/YujKpFN49',
label: 'X',
href: 'https://x.com/OpenKnowledgeAI',
target: '_blank',
rel: 'noopener noreferrer',
hasIcon: true,
},
{
label: 'Twitter',
href: 'https://x.com/inkeep',
label: 'Open Knowledge',
href: 'https://openknowledge.ai/',
target: '_blank',
rel: 'noopener noreferrer',
hasIcon: true,
Expand Down
24 changes: 16 additions & 8 deletions packages/app/src/components/HelpPopover.tsx
Original file line number Diff line number Diff line change
@@ -1,27 +1,35 @@
import type { MessageDescriptor } from '@lingui/core';
import { msg } from '@lingui/core/macro';
import { Trans, useLingui } from '@lingui/react/macro';
import { BookOpen, CircleHelp, Globe } from 'lucide-react';
import { BookOpen, CircleHelp } from 'lucide-react';
import type { ComponentProps, FC } from 'react';
import { useState } from 'react';
import { Button } from '@/components/ui/button';
import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover';
import { Tooltip, TooltipContent, TooltipTrigger } from '@/components/ui/tooltip';
import { dispatchExternalLinkClick } from '@/lib/external-link';
import { cn } from '@/lib/utils';
import { DiscordIcon } from './icons/discord';
import { GithubIcon } from './icons/github';
import { OkIcon } from './icons/ok';
import { XTwitterIcon } from './icons/x-twitter';

const links: Array<{
label: string | MessageDescriptor;
href: string;
icon: FC<ComponentProps<'svg'>>;
iconClassName?: string;
}> = [
{ label: msg`Documentation`, href: 'https://openknowledge.ai/docs', icon: BookOpen },
{ label: msg`Docs`, href: 'https://openknowledge.ai/docs', icon: BookOpen },
{ label: 'GitHub', href: 'https://github.com/inkeep/open-knowledge', icon: GithubIcon },
{ label: msg`Website`, href: 'https://openknowledge.ai/', icon: Globe },
{ label: 'Discord', href: 'https://discord.com/invite/YujKpFN49', icon: DiscordIcon },
{ label: 'Twitter', href: 'https://x.com/inkeep', icon: XTwitterIcon },
{ label: 'X', href: 'https://x.com/OpenKnowledgeAI', icon: XTwitterIcon },
{
label: 'Open Knowledge',
href: 'https://openknowledge.ai/',
icon: OkIcon,
iconClassName: 'scale-125 grayscale transition-[filter] group-hover:grayscale-0',
},
];

export const HelpPopover: FC = () => {
Expand Down Expand Up @@ -49,23 +57,23 @@ export const HelpPopover: FC = () => {
<Trans>Resources</Trans>
</TooltipContent>
</Tooltip>
<PopoverContent align="end" className="w-64 p-3">
<PopoverContent align="end" className="w-48 p-3">
<p className="font-mono tracking-wide uppercase text-muted-foreground text-xs mb-1">
<Trans>Resources</Trans>
</p>
<nav aria-label={t`Resources`}>
<ul className="space-y-0.5">
{links.map(({ label, href, icon: Icon }) => (
{links.map(({ label, href, icon: Icon, iconClassName }) => (
<li key={href}>
<a
href={href}
target="_blank"
rel="noopener noreferrer"
onClick={(e) => dispatchExternalLinkClick(e, href)}
onAuxClick={(e) => dispatchExternalLinkClick(e, href)}
className="flex items-center gap-2.5 rounded-md px-2 py-1.5 text-sm text-muted-foreground transition-colors hover:bg-azure-900/5 dark:hover:bg-white/20 hover:text-primary"
className="group flex items-center gap-2.5 rounded-md px-2 py-1.5 text-sm text-muted-foreground transition-colors hover:bg-azure-900/5 dark:hover:bg-white/20 hover:text-primary"
>
<Icon aria-hidden="true" className="size-4 shrink-0" />
<Icon aria-hidden="true" className={cn('size-4 shrink-0', iconClassName)} />
{typeof label === 'string' ? label : t(label)}
</a>
</li>
Expand Down
Loading