+ Chat with AI
+ without privacy concerns
+
+ + Jan is an open source ChatGPT-alternative that runs 100% offline. +
+ +diff --git a/blog.png b/blog.png deleted file mode 100644 index 584a0f825..000000000 Binary files a/blog.png and /dev/null differ diff --git a/clog.png b/clog.png deleted file mode 100644 index 793ab6a41..000000000 Binary files a/clog.png and /dev/null differ diff --git a/clog10.png b/clog10.png deleted file mode 100644 index 7f19349ad..000000000 Binary files a/clog10.png and /dev/null differ diff --git a/clog11.png b/clog11.png deleted file mode 100644 index 95959da47..000000000 Binary files a/clog11.png and /dev/null differ diff --git a/clog12.png b/clog12.png deleted file mode 100644 index a0936d9ea..000000000 Binary files a/clog12.png and /dev/null differ diff --git a/clog13.png b/clog13.png deleted file mode 100644 index 235fb704f..000000000 Binary files a/clog13.png and /dev/null differ diff --git a/clog2.png b/clog2.png deleted file mode 100644 index a38d3e4b2..000000000 Binary files a/clog2.png and /dev/null differ diff --git a/clog3.png b/clog3.png deleted file mode 100644 index 04ad4c37e..000000000 Binary files a/clog3.png and /dev/null differ diff --git a/clog4.png b/clog4.png deleted file mode 100644 index 2b5fd1493..000000000 Binary files a/clog4.png and /dev/null differ diff --git a/clog5.png b/clog5.png deleted file mode 100644 index 3045afe63..000000000 Binary files a/clog5.png and /dev/null differ diff --git a/clog6.png b/clog6.png deleted file mode 100644 index bc82106ad..000000000 Binary files a/clog6.png and /dev/null differ diff --git a/clog7.png b/clog7.png deleted file mode 100644 index 40a5e030f..000000000 Binary files a/clog7.png and /dev/null differ diff --git a/clog8.png b/clog8.png deleted file mode 100644 index ec4699628..000000000 Binary files a/clog8.png and /dev/null differ diff --git a/clog9.png b/clog9.png deleted file mode 100644 index 1dc8bad87..000000000 Binary files a/clog9.png and /dev/null differ diff --git a/docs/src/components/FooterMenu/index.tsx b/docs/src/components/FooterMenu/index.tsx index 0d9a50190..287c8a517 100644 --- a/docs/src/components/FooterMenu/index.tsx +++ b/docs/src/components/FooterMenu/index.tsx @@ -35,28 +35,28 @@ const socials = [ ] const menus = [ - { - name: 'Product', - child: [ - { - menu: 'Download', - path: '/download', - }, - { - menu: 'Changelog', - path: '/changelog', - }, - ], - }, - { - name: 'For Developers', - child: [ - { - menu: 'Documentation', - path: '/docs', - }, - ], - }, + // { + // name: 'Product', + // child: [ + // { + // menu: 'Download', + // path: '/download', + // }, + // { + // menu: 'Changelog', + // path: '/changelog', + // }, + // ], + // }, + // { + // name: 'For Developers', + // child: [ + // { + // menu: 'Documentation', + // path: '/docs', + // }, + // ], + // }, { name: 'Community', child: [ @@ -71,7 +71,7 @@ const menus = [ external: true, }, { - menu: 'Twitter', + menu: 'X/Twitter', path: 'https://twitter.com/jandotai', external: true, }, @@ -86,8 +86,8 @@ const menus = [ name: 'Company', child: [ { - menu: 'About', - path: '/about', + menu: 'Menlo', + path: 'https://menlo.ai', }, { menu: 'Blog', @@ -158,8 +158,8 @@ export default function Footer() { return (
+ {description} +
+ )} + + + {buttonText} + + +{entry.data.description}
- + {tags.length > 0 && ( - + @@ -170,6 +171,48 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) .article-content { line-height: 1.7; font-size: 1.1rem; + overflow-wrap: break-word; + word-wrap: break-word; + } + + /* Image styling */ + .article-content :global(img) { + max-width: 100%; + height: auto; + display: block; + margin: 2rem auto; + border-radius: 0.75rem; + box-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06); + border: 1px solid var(--sl-color-gray-5); + } + + /* For inline images or icons */ + .article-content :global(p img) { + display: inline-block; + margin: 0 0.25rem; + vertical-align: middle; + max-height: 1.5em; + width: auto; + border: none; + box-shadow: none; + border-radius: 0; + } + + /* For figure elements if used */ + .article-content :global(figure) { + margin: 2rem 0; + text-align: center; + } + + .article-content :global(figure img) { + margin-bottom: 0.5rem; + } + + .article-content :global(figcaption) { + font-size: 0.9rem; + color: var(--sl-color-text-muted); + font-style: italic; + margin-top: 0.5rem; } /* Content styling */ @@ -233,11 +276,12 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) } .article-content :global(code) { - background: var(--sl-color-bg-sidebar); - padding: 0.2rem 0.4rem; + background: var(--sl-color-bg-inline-code, var(--sl-color-gray-6)); + padding: 0.125rem 0.375rem; border-radius: 0.25rem; - font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; - font-size: 0.9em; + font-family: 'Fira Code', 'SF Mono', Monaco, 'Inconsolata', 'Roboto Mono', monospace; + font-size: 0.875em; + color: var(--sl-color-text-code); } .article-content :global(pre) { @@ -247,6 +291,17 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) overflow-x: auto; margin: 1.5rem 0; border: 1px solid var(--sl-color-gray-5); + max-width: 100%; + text-align: left; + font-family: 'Fira Code', 'SF Mono', Monaco, 'Inconsolata', 'Roboto Mono', monospace; + font-size: 0.9rem; + line-height: 1.6; + } + + .article-content :global(pre code) { + background: transparent; + padding: 0; + font-size: 0.875rem; } .article-content :global(table) { @@ -270,6 +325,75 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) font-weight: 600; } + .article-content :global(tbody tr:last-child td) { + border-bottom: none; + } + + /* Horizontal scrolling for wide content */ + .article-content :global(.table-wrapper), + .article-content :global(.overflow-x-auto) { + overflow-x: auto; + margin: 1.5rem 0; + } + + /* Fix for MDX components */ + .article-content :global(.callout), + .article-content :global(.note), + .article-content :global(.warning), + .article-content :global(.tip) { + padding: 1rem 1.25rem; + margin: 1.5rem 0; + border-radius: 0.5rem; + border-left: 4px solid var(--sl-color-accent); + background: var(--sl-color-bg-sidebar); + } + + /* Lists inside article content */ + .article-content :global(ul ul), + .article-content :global(ol ol), + .article-content :global(ul ol), + .article-content :global(ol ul) { + margin-bottom: 0.5rem; + margin-top: 0.5rem; + } + + /* Strong and emphasis */ + .article-content :global(strong) { + font-weight: 600; + color: var(--sl-color-text); + } + + .article-content :global(em) { + font-style: italic; + } + + /* Horizontal rule */ + .article-content :global(hr) { + border: none; + border-top: 1px solid var(--sl-color-gray-5); + margin: 2rem 0; + } + + /* Video embeds */ + .article-content :global(video) { + max-width: 100%; + height: auto; + border-radius: 0.75rem; + margin: 2rem 0; + } + + /* Iframe embeds */ + .article-content :global(iframe) { + max-width: 100%; + border-radius: 0.75rem; + margin: 2rem 0; + } + + /* Custom MDX component containers */ + .article-content :global(.mdx-component) { + margin: 2rem 0; + } + .article-footer { margin-top: 4rem; padding-top: 3rem; @@ -333,24 +457,24 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) .blog-article { padding: 1.5rem 1rem; } - + .article-title { font-size: 2rem; } - + .article-description { font-size: 1.1rem; } - + .article-content { font-size: 1rem; } - + .article-meta { flex-direction: column; gap: 0.5rem; } - + .footer-cta { padding: 1.5rem; } @@ -360,14 +484,173 @@ const tags = entry.data.tags ? entry.data.tags.split(',').map(tag => tag.trim()) .blog-article { padding: 1rem 0.75rem; } - + .article-title { font-size: 1.75rem; } - + .article-content :global(pre) { padding: 1rem; + font-size: 0.8rem; + } + + .article-content :global(img) { + border-radius: 0.5rem; + } + + .article-content :global(table) { + font-size: 0.9rem; } } - \ No newline at end of file + + + + + diff --git a/website/src/pages/changelog.astro b/website/src/pages/changelog.astro index bae30058c..d4824afee 100644 --- a/website/src/pages/changelog.astro +++ b/website/src/pages/changelog.astro @@ -5,7 +5,7 @@ import CustomNav from '../components/CustomNav.astro'; // Get all changelog entries and sort by date (newest first) const changelogEntries = await getCollection('changelog'); -const sortedEntries = changelogEntries.sort((a, b) => +const sortedEntries = changelogEntries.sort((a, b) => new Date(b.data.date).getTime() - new Date(a.data.date).getTime() ); @@ -21,7 +21,7 @@ const description = 'Latest release updates from the Jan team. Check out our RoaLatest release updates from the Jan team. Check out our Roadmap to see what's next.
- +{entry.data.description}
- + {entry.data.version && ( New release Jan App v{entry.data.version} )} @@ -298,17 +298,17 @@ const description = 'Latest release updates from the Jan team. Check out our Roa } /* === PROGRESSIVE RESPONSIVE DESIGN === */ - + /* Tablet and down (768px) */ @media (max-width: 768px) { .changelog-header h1 { font-size: 2.5rem; } - + .changelog-entry { flex-direction: column; } - + .timeline-marker { width: 100%; flex-direction: row; @@ -316,56 +316,56 @@ const description = 'Latest release updates from the Jan team. Check out our Roa align-items: center; margin-bottom: 1rem; } - + .timeline-date { margin-top: 0; margin-left: 1rem; } - + .timeline-dot::before { display: none; } - + .content-card { margin-left: 0; } } - + /* Mobile landscape (640px and below) */ @media (max-width: 640px) { .changelog-header h1 { font-size: 2rem; } - + .changelog-header p { font-size: 1rem; } - + /* Email signup remains horizontal on mobile landscape */ .email-signup { max-width: 350px; } - + .email-input { font-size: 0.9rem; } - + .signup-button { font-size: 1rem; padding: 10px 14px; } } - + /* Mobile (640px and below) - Much smaller email signup */ @media (max-width: 640px) { .changelog-container { padding: 1.5rem 1rem; } - + .changelog-header h1 { font-size: 2rem; } - + /* Make email signup much more compact */ .email-signup { flex-direction: column; @@ -373,13 +373,13 @@ const description = 'Latest release updates from the Jan team. Check out our Roa padding: 4px; gap: 4px; } - + .email-input { padding: 8px 12px; border-radius: 6px; font-size: 0.85rem; } - + .signup-button { padding: 8px 12px; border-radius: 6px; @@ -387,57 +387,57 @@ const description = 'Latest release updates from the Jan team. Check out our Roa min-height: auto; } } - + /* Very small mobile (480px and below) */ @media (max-width: 480px) { .changelog-container { padding: 1rem 0.75rem; } - + .changelog-header h1 { font-size: 1.75rem; } - + .changelog-header { margin-bottom: 2.5rem; } - + /* Even more compact email signup */ .email-signup { max-width: 240px; padding: 3px; } - + .email-input { padding: 6px 10px; font-size: 0.8rem; } - + .signup-button { padding: 6px 10px; font-size: 0.8rem; } } - + /* Tiny screens (360px and below) */ @media (max-width: 360px) { .changelog-container { padding: 1rem 0.5rem; } - + .changelog-header h1 { font-size: 1.5rem; } - + .email-signup { max-width: 200px; } - + .email-input { font-size: 0.75rem; padding: 5px 8px; } - + .signup-button { font-size: 0.75rem; padding: 5px 8px; @@ -449,7 +449,7 @@ const description = 'Latest release updates from the Jan team. Check out our Roa // Add email signup functionality const signupButton = document.querySelector('.signup-button'); const emailInput = document.querySelector('.email-input'); - + signupButton?.addEventListener('click', (e) => { e.preventDefault(); const email = (emailInput as HTMLInputElement)?.value; @@ -459,11 +459,11 @@ const description = 'Latest release updates from the Jan team. Check out our Roa alert('Thanks for subscribing! We\'ll keep you updated.'); } }); - + emailInput?.addEventListener('keypress', (e) => { if (e.key === 'Enter') { signupButton?.click(); } }); - \ No newline at end of file + diff --git a/website/src/pages/index.astro b/website/src/pages/index.astro new file mode 100644 index 000000000..ff150ee2b --- /dev/null +++ b/website/src/pages/index.astro @@ -0,0 +1,198 @@ +--- +import Layout from '@/layouts/Layout.astro'; +import CustomNav from '@/components/CustomNav.astro'; +import DownloadButton from '@/components/DownloadButton.astro'; + +// Placeholder data - to be fetched from GitHub API later +const latestVersion = 'v0.6.7'; +const downloadCount = '3.8M+'; +--- + ++ Jan is an open source ChatGPT-alternative that runs 100% offline. +
+ +