diff --git a/.sonarcloud.properties b/.sonarcloud.properties new file mode 100644 index 000000000..c7608d331 --- /dev/null +++ b/.sonarcloud.properties @@ -0,0 +1,8 @@ +# SonarQube Cloud — Automatic Analysis configuration. +# +# Exclude the vendored, generated Freya runtime bundle from analysis. It is a +# prebuilt third-party artifact (esbuild output; see website/tools/freya-vendor), +# not hand-authored source, so findings on it — e.g. Math.random() used to mint a +# fallback tool-use id — are noise rather than defects in this repo's code. +sonar.exclusions=website/friggframework-api/lib/** +sonar.cpd.exclusions=website/friggframework-api/lib/** diff --git a/netlify.toml b/netlify.toml new file mode 100644 index 000000000..48eb63ac9 --- /dev/null +++ b/netlify.toml @@ -0,0 +1,34 @@ +# Netlify configuration for the friggframework.org marketing site. +# +# The site lives in the website/ subdirectory of the Frigg monorepo, so we set +# the base directory to "website". Per Netlify's file-based configuration, all +# other paths in this file are resolved relative to that base directory. +[build] + base = "website" + publish = "." + functions = "friggframework-api" + +# Ship the vendored Freya bundle and the roadmap catalog JSON alongside the +# functions so the "Ask Freya" assistant can load the runtime and retrieve +# ADR / API data at request time. Paths are relative to the base directory. +[functions] + included_files = ["friggframework-api/lib/**", "roadmap/data/*.json"] + +# Proxy the public API host to the deployed serverless functions. +[[redirects]] + from = 'https://api.friggframework.org/*' + to = '/.netlify/functions/:splat' + status = 200 + +# Feedback host now lives on the roadmap subdomain. +[[redirects]] + from = 'https://feedback.friggframework.org/*' + to = 'https://roadmap.friggframework.org/:splat' + status = 301 + force = true + +[[redirects]] + from = 'http://feedback.friggframework.org/*' + to = 'http://roadmap.friggframework.org/:splat' + status = 301 + force = true diff --git a/website/.gitignore b/website/.gitignore new file mode 100644 index 000000000..e87ffb3ee --- /dev/null +++ b/website/.gitignore @@ -0,0 +1,8 @@ +# Local Netlify state / build output +.netlify + +# Function dependencies +node_modules + +# Local env +.env diff --git a/website/README.md b/website/README.md new file mode 100644 index 000000000..7a403d27a --- /dev/null +++ b/website/README.md @@ -0,0 +1,66 @@ +# friggframework.org marketing site + +The public marketing site for the Frigg Integration Framework +(https://friggframework.org). It is a single, self-contained static page +(inline CSS + vanilla JS, no build step, no framework runtime) with a small set +of Netlify serverless functions for the newsletter / Slack Connect signup flow. + +Previously this site lived in the `lefthook--demo-frigg-application` repo. It +now lives here in the Frigg core monorepo so the site can be iterated on +alongside the framework and deployed from the `next` branch via Netlify. The +page was rebuilt from the original Bootstrap/jQuery version into a modern, +dependency-free page with a light/dark/system theme toggle and messaging around +the current framework story (agents building integrations, integrations exposed +as MCP tools, owning your own stack). + +## Layout + +| Path | What it is | +|------|------------| +| `index.html` | The entire single-page site — inline CSS + JS, no build step | +| `fonts/webfonts/` | Self-hosted woff2 (Bricolage Grotesque, Hanken Grotesk, JetBrains Mono) | +| `assets/img/` | Logo mark + integration icons used in the marquee | +| `friggframework-api/` | Netlify serverless functions (`subscribe`, `submission-created`) | +| `../netlify.toml` | Netlify build config (base = `website`) — lives at the repo root | + +## Design notes + +- **Theme**: tokens are CSS custom properties on `:root`; `prefers-color-scheme` + sets the default and a header toggle stamps `data-theme="light|dark"` (stored + in `localStorage`) which overrides the media query in both directions. +- **No external requests**: fonts are self-hosted; the only third-party scripts + are the existing Google Analytics + PostHog snippets carried over from the + original site. +- **Motion** (weave canvas, terminal typing, scroll reveals) is disabled under + `prefers-reduced-motion`. +- The signup `