From 516504923306dad248588309e8456aef1b7a0036 Mon Sep 17 00:00:00 2001 From: Leo Farias Date: Wed, 15 Jul 2026 10:14:05 -0400 Subject: [PATCH] Add Ack documentation site --- components/FloatingNavbar.tsx | 60 +- components/ProductFooter.tsx | 39 + components/landing/ack/AckHome.tsx | 293 ++++ components/landing/ack/ack.css | 1409 +++++++++++++++ globals.css | 42 +- next.config.mjs | 6 + package.json | 1 + public/ack/llms.txt | 201 +++ public/assets/ack-social.png | Bin 0 -> 53133 bytes public/assets/logo_ack_sidebar.svg | 3 + screenshots/.gitignore | 1 + screenshots/ack-docs-desktop.png | Bin 0 -> 399324 bytes screenshots/ack-landing-desktop.png | Bin 0 -> 1256086 bytes screenshots/ack-landing-mobile.png | Bin 0 -> 1000134 bytes site-tests/ack-integration.test.mjs | 103 ++ src/app/ack/page.tsx | 37 + src/app/layout.jsx | 16 +- src/content/_meta.js | 22 +- src/content/documentation/_meta.js | 1 + src/content/documentation/ack/_meta.js | 10 + .../documentation/ack/advanced/_meta.js | 15 + .../documentation/ack/advanced/codecs.mdx | 117 ++ .../ack/advanced/configuration.mdx | 103 ++ .../creating-schema-converter-packages.mdx | 1519 +++++++++++++++++ .../ack/advanced/json-schema-integration.mdx | 365 ++++ .../advanced/schema-converter-quickstart.mdx | 393 +++++ .../ack/advanced/typesafe-schemas.mdx | 126 ++ .../documentation/ack/essentials/_meta.js | 9 + .../ack/essentials/error-handling.mdx | 266 +++ .../ack/essentials/json-serialization.mdx | 154 ++ .../documentation/ack/essentials/schemas.mdx | 458 +++++ .../ack/essentials/validation.mdx | 389 +++++ .../ack/getting-started/_meta.js | 8 + .../ack/getting-started/installation.mdx | 78 + .../ack/getting-started/overview.mdx | 68 + .../getting-started/quickstart-tutorial.mdx | 84 + .../documentation/ack/how-to-guides/_meta.js | 8 + .../ack/how-to-guides/common-recipes.mdx | 220 +++ .../ack/how-to-guides/custom-validation.mdx | 111 ++ .../how-to-guides/flutter-form-validation.mdx | 270 +++ .../documentation/ack/reference/_meta.js | 7 + .../ack/reference/api-reference.mdx | 380 +++++ .../documentation/ack/reference/llms-txt.mdx | 9 + 43 files changed, 7385 insertions(+), 16 deletions(-) create mode 100644 components/ProductFooter.tsx create mode 100644 components/landing/ack/AckHome.tsx create mode 100644 components/landing/ack/ack.css create mode 100644 public/ack/llms.txt create mode 100644 public/assets/ack-social.png create mode 100644 public/assets/logo_ack_sidebar.svg create mode 100644 screenshots/ack-docs-desktop.png create mode 100644 screenshots/ack-landing-desktop.png create mode 100644 screenshots/ack-landing-mobile.png create mode 100644 site-tests/ack-integration.test.mjs create mode 100644 src/app/ack/page.tsx create mode 100644 src/content/documentation/ack/_meta.js create mode 100644 src/content/documentation/ack/advanced/_meta.js create mode 100644 src/content/documentation/ack/advanced/codecs.mdx create mode 100644 src/content/documentation/ack/advanced/configuration.mdx create mode 100644 src/content/documentation/ack/advanced/creating-schema-converter-packages.mdx create mode 100644 src/content/documentation/ack/advanced/json-schema-integration.mdx create mode 100644 src/content/documentation/ack/advanced/schema-converter-quickstart.mdx create mode 100644 src/content/documentation/ack/advanced/typesafe-schemas.mdx create mode 100644 src/content/documentation/ack/essentials/_meta.js create mode 100644 src/content/documentation/ack/essentials/error-handling.mdx create mode 100644 src/content/documentation/ack/essentials/json-serialization.mdx create mode 100644 src/content/documentation/ack/essentials/schemas.mdx create mode 100644 src/content/documentation/ack/essentials/validation.mdx create mode 100644 src/content/documentation/ack/getting-started/_meta.js create mode 100644 src/content/documentation/ack/getting-started/installation.mdx create mode 100644 src/content/documentation/ack/getting-started/overview.mdx create mode 100644 src/content/documentation/ack/getting-started/quickstart-tutorial.mdx create mode 100644 src/content/documentation/ack/how-to-guides/_meta.js create mode 100644 src/content/documentation/ack/how-to-guides/common-recipes.mdx create mode 100644 src/content/documentation/ack/how-to-guides/custom-validation.mdx create mode 100644 src/content/documentation/ack/how-to-guides/flutter-form-validation.mdx create mode 100644 src/content/documentation/ack/reference/_meta.js create mode 100644 src/content/documentation/ack/reference/api-reference.mdx create mode 100644 src/content/documentation/ack/reference/llms-txt.mdx diff --git a/components/FloatingNavbar.tsx b/components/FloatingNavbar.tsx index e1da3aa0..72404783 100644 --- a/components/FloatingNavbar.tsx +++ b/components/FloatingNavbar.tsx @@ -22,12 +22,14 @@ function DiscordIcon(props: React.ComponentPropsWithoutRef<'svg'>) { ) } -type ProductId = 'mix' | 'remix' | 'stargate' | 'code-analysis' +type ProductId = 'mix' | 'remix' | 'ack' | 'stargate' | 'code-analysis' function getActiveProduct(pathname: string | null): ProductId { if (!pathname) return 'mix' if (pathname.startsWith('/documentation/remix')) return 'remix' if (pathname === '/remix' || pathname.startsWith('/remix/')) return 'remix' + if (pathname.startsWith('/documentation/ack')) return 'ack' + if (pathname === '/ack' || pathname.startsWith('/ack/')) return 'ack' if (pathname === '/stargate' || pathname.startsWith('/stargate/')) return 'stargate' if (pathname === '/code-analysis' || pathname.startsWith('/code-analysis/')) return 'code-analysis' return 'mix' @@ -46,21 +48,25 @@ const VERSION_ITEMS = [ const MIX_GITHUB_URL = 'https://github.com/btwld/mix' const REMIX_GITHUB_URL = 'https://github.com/btwld/remix' +const ACK_GITHUB_URL = 'https://github.com/btwld/ack' const TWITTER_URL = 'https://twitter.com/leoafarias' const DISCORD_URL = 'https://discord.com/invite/Ycn6GV3m2k' const MIX_DOCS_URL = '/documentation/mix/overview/introduction' const REMIX_DOCS_URL = '/documentation/remix' +const ACK_DOCS_URL = '/documentation/ack/getting-started/overview' // Stargate and Code Analysis have no public docs or repos yet. function getDocsHref(product: ProductId): string | null { if (product === 'mix') return MIX_DOCS_URL if (product === 'remix') return REMIX_DOCS_URL + if (product === 'ack') return ACK_DOCS_URL return null } function getGithubHref(product: ProductId): string | null { if (product === 'mix') return MIX_GITHUB_URL if (product === 'remix') return REMIX_GITHUB_URL + if (product === 'ack') return ACK_GITHUB_URL return null } @@ -91,6 +97,13 @@ const PRODUCTS: Product[] = [ href: '/remix', logo: '/assets/logo_remix_sidebar.png', }, + { + id: 'ack' as const, + label: 'Ack', + href: '/ack', + logo: '/assets/logo_ack_sidebar.svg', + showLabel: true, + }, { id: 'stargate' as const, label: 'Stargate', @@ -197,6 +210,51 @@ const DOCS_SECTIONS: Partial> = { ], }, ], + ack: [ + { + label: 'Getting Started', + pages: [ + { label: 'Overview', href: '/documentation/ack/getting-started/overview' }, + { label: 'Installation', href: '/documentation/ack/getting-started/installation' }, + { label: 'Quickstart Tutorial', href: '/documentation/ack/getting-started/quickstart-tutorial' }, + ], + }, + { + label: 'Essentials', + pages: [ + { label: 'Schema Types', href: '/documentation/ack/essentials/schemas' }, + { label: 'Validation Rules', href: '/documentation/ack/essentials/validation' }, + { label: 'Error Handling', href: '/documentation/ack/essentials/error-handling' }, + { label: 'JSON Serialization', href: '/documentation/ack/essentials/json-serialization' }, + ], + }, + { + label: 'How-To Guides', + pages: [ + { label: 'Flutter Form Validation', href: '/documentation/ack/how-to-guides/flutter-form-validation' }, + { label: 'Common Recipes', href: '/documentation/ack/how-to-guides/common-recipes' }, + { label: 'Custom Validation', href: '/documentation/ack/how-to-guides/custom-validation' }, + ], + }, + { + label: 'Advanced', + pages: [ + { label: 'Codecs', href: '/documentation/ack/advanced/codecs' }, + { label: 'TypeSafe Schemas', href: '/documentation/ack/advanced/typesafe-schemas' }, + { label: 'JSON Schema Integration', href: '/documentation/ack/advanced/json-schema-integration' }, + { label: 'Configuration', href: '/documentation/ack/advanced/configuration' }, + { label: 'Adapter Package Quickstart', href: '/documentation/ack/advanced/schema-converter-quickstart' }, + { label: 'Creating Adapter Packages', href: '/documentation/ack/advanced/creating-schema-converter-packages' }, + ], + }, + { + label: 'Reference', + pages: [ + { label: 'API Reference', href: '/documentation/ack/reference/api-reference' }, + { label: 'AI & llms.txt', href: '/documentation/ack/reference/llms-txt' }, + ], + }, + ], } function VersionMenu() { diff --git a/components/ProductFooter.tsx b/components/ProductFooter.tsx new file mode 100644 index 00000000..6f335861 --- /dev/null +++ b/components/ProductFooter.tsx @@ -0,0 +1,39 @@ +'use client' + +import Link from 'next/link' +import { usePathname } from 'next/navigation' + +function isAckPath(pathname: string | null) { + return pathname === '/ack' + || pathname?.startsWith('/ack/') + || pathname?.startsWith('/documentation/ack') +} + +export default function ProductFooter() { + const pathname = usePathname() + + if (isAckPath(pathname)) { + return ( +
+ Built for trustworthy Dart boundaries. +
+ GitHub + pub.dev + llms.txt +
+
+ ) + } + + return ( +
+ © 2026 Concepta Tech. +
+ GitHub + pub.dev + Discord + Twitter +
+
+ ) +} diff --git a/components/landing/ack/AckHome.tsx b/components/landing/ack/AckHome.tsx new file mode 100644 index 00000000..95421ac6 --- /dev/null +++ b/components/landing/ack/AckHome.tsx @@ -0,0 +1,293 @@ +/* eslint-disable react/no-unescaped-entities, react/jsx-no-comment-textnodes -- Dart snippets intentionally render source punctuation as JSX text. */ +import Link from 'next/link' +import './ack.css' + +export function AckHome() { + return ( +
+