From 2911f3a1809053843f769900421466cfd8464f85 Mon Sep 17 00:00:00 2001 From: Everett Date: Sat, 22 Aug 2026 14:06:58 -0700 Subject: [PATCH] Add project-owned GitHub Pages site --- .github/workflows/pages.yml | 26 ++++++++++++++++++++++++++ README.md | 2 ++ site/.nojekyll | 1 + site/api/index.html | 1 + site/components/index.html | 1 + site/index.html | 9 +++++++++ site/privacy/index.html | 1 + site/styles.css | 1 + site/templates/index.html | 1 + 9 files changed, 43 insertions(+) create mode 100644 .github/workflows/pages.yml create mode 100644 site/.nojekyll create mode 100644 site/api/index.html create mode 100644 site/components/index.html create mode 100644 site/index.html create mode 100644 site/privacy/index.html create mode 100644 site/styles.css create mode 100644 site/templates/index.html diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 0000000..e3100fe --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,26 @@ +name: pages +on: + push: + branches: [main] + paths: ['site/**', '.github/workflows/pages.yml'] + workflow_dispatch: +permissions: + contents: read + pages: write + id-token: write +concurrency: + group: pages + cancel-in-progress: true +jobs: + deploy: + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + steps: + - uses: actions/checkout@v4 + - uses: actions/configure-pages@v5 + - uses: actions/upload-pages-artifact@v3 + with: { path: site } + - id: deployment + uses: actions/deploy-pages@v4 diff --git a/README.md b/README.md index e5b5f19..cec5c68 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # ScriptWidget 🎨 +Website: +
[![GitHub Stars](https://img.shields.io/github/stars/everettjf/ScriptWidget?style=flat-square&color=4ECDC4)](https://github.com/everettjf/ScriptWidget/stargazers) diff --git a/site/.nojekyll b/site/.nojekyll new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/site/.nojekyll @@ -0,0 +1 @@ + diff --git a/site/api/index.html b/site/api/index.html new file mode 100644 index 0000000..2138332 --- /dev/null +++ b/site/api/index.html @@ -0,0 +1 @@ +ScriptWidget Runtime API

Continue to the ScriptWidget Runtime API.

diff --git a/site/components/index.html b/site/components/index.html new file mode 100644 index 0000000..af00080 --- /dev/null +++ b/site/components/index.html @@ -0,0 +1 @@ +ScriptWidget JSX components

Continue to the ScriptWidget JSX component source.

diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..7bfe9ee --- /dev/null +++ b/site/index.html @@ -0,0 +1,9 @@ + +ScriptWidget — Native widgets with JavaScript + JSX + +
Open source · iOS · iPadOS · macOS

Widgets, written your way.

Write JavaScript and JSX, preview in ScriptWidget Studio, and render native WidgetKit experiences across Apple platforms—without authoring every widget in Swift.

A gallery of widgets created with ScriptWidget
+
JavaScriptCore runtimeNative SwiftUI renderingLive preview on MacCommunity gallery
+

From an idea to a native widget.

Write in JavaScript + JSX

Compose familiar declarative layouts and use versioned APIs for data, files, networking, storage, device state, and more.

Build in Studio

Edit with diagnostics, inspect runtime output, and preview multiple widget families without repeating an Xcode build loop.

Share real packages

Use versioned manifests, explicit permissions, host allowlists, and the community Gallery to distribute reusable widgets.

+

JSX in. Native WidgetKit out.

$render(
  <vstack frame="max" padding="16" background="#171923">
    <text font="caption" color="#a9b0c0">Today</text>
    <text font="largeTitle" color="#ffffff">Build something useful.</text>
  </vstack>
);
+
+ diff --git a/site/privacy/index.html b/site/privacy/index.html new file mode 100644 index 0000000..b775c9e --- /dev/null +++ b/site/privacy/index.html @@ -0,0 +1 @@ +Privacy — ScriptWidget

Privacy policy.

ScriptWidget stores your scripts and app data on your devices and, when you enable it, in your iCloud account. ScriptWidget does not operate an account service and does not sell personal information.

Scripts and packages you choose to run may request access to device capabilities or network hosts. ScriptWidget presents and enforces package permissions, but third-party scripts and services have their own behavior and privacy practices. Review a package and its requested permissions before installing it.

If you configure an AI provider, requests are sent to the provider and endpoint you select under that provider’s terms. Your API credentials are stored locally using Apple platform security facilities.

Apple may process App Store downloads, purchases, diagnostics, and iCloud data under Apple’s policies. For privacy questions, contact xnuapp@gmail.com.

Last updated: August 22, 2026.

diff --git a/site/styles.css b/site/styles.css new file mode 100644 index 0000000..39b0c01 --- /dev/null +++ b/site/styles.css @@ -0,0 +1 @@ +:root{color-scheme:light;--ink:#17202a;--muted:#68717d;--line:#dde2e7;--paper:#fbfaf7;--card:#fff;--accent:#6b4eff;--code:#202531}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--ink);font-family:Inter,ui-sans-serif,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;line-height:1.6}a{color:inherit}.wrap{width:min(1120px,calc(100% - 40px));margin:auto}.nav{height:72px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{font-weight:800;text-decoration:none;letter-spacing:-.04em}.navlinks{display:flex;gap:22px;align-items:center}.navlinks a{font-size:14px;text-decoration:none;color:var(--muted)}.navlinks a:hover{color:var(--ink)}.hero{display:grid;grid-template-columns:1.1fr .9fr;gap:60px;align-items:center;padding:96px 0 72px}.eyebrow,.section-label{font:700 12px/1.2 ui-monospace,SFMono-Regular,Menlo,monospace;text-transform:uppercase;letter-spacing:.12em;color:var(--accent)}h1{font-size:clamp(48px,7vw,84px);line-height:.98;letter-spacing:-.065em;margin:18px 0 24px;max-width:760px}.lede{font-size:20px;color:var(--muted);max-width:650px}.actions{display:flex;flex-wrap:wrap;gap:12px;margin-top:32px}.button{display:inline-flex;align-items:center;justify-content:center;min-height:46px;padding:0 18px;border:1px solid var(--ink);border-radius:999px;text-decoration:none;font-size:14px;font-weight:700;transition:.2s}.button.primary{background:var(--ink);color:#fff}.button:hover{transform:translateY(-2px)}.visual{position:relative;padding:16px}.visual:before{content:"";position:absolute;inset:-10px 25% 20% -5%;border-radius:50%;background:#ded7ff;filter:blur(45px);opacity:.65}.visual img{position:relative;width:100%;border-radius:26px;box-shadow:0 24px 70px #483b8025}.strip{border-block:1px solid var(--line);padding:28px 0;color:var(--muted);font:600 13px ui-monospace,SFMono-Regular,Menlo,monospace}.strip .wrap{display:flex;justify-content:space-between;gap:22px;flex-wrap:wrap}.section{padding:88px 0;border-bottom:1px solid var(--line)}h2{font-size:clamp(34px,5vw,56px);line-height:1.05;letter-spacing:-.045em;margin:14px 0 40px}.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.card{background:var(--card);border:1px solid var(--line);border-radius:18px;padding:28px}.card h3{margin:0 0 10px;font-size:18px}.card p{margin:0;color:var(--muted);font-size:15px}.code{background:var(--code);color:#eef1f6;border-radius:20px;padding:28px;overflow:auto;font:14px/1.8 ui-monospace,SFMono-Regular,Menlo,monospace}.code .pink{color:#ff8aae}.code .purple{color:#ad9cff}.docs{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.doc{display:block;background:#fff;border:1px solid var(--line);border-radius:16px;padding:22px;text-decoration:none;transition:.2s}.doc:hover{border-color:var(--accent);transform:translateY(-2px)}.doc strong{display:block;margin-bottom:6px}.doc span{color:var(--muted);font-size:14px}.footer{padding:42px 0}.footer .wrap{display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;color:var(--muted);font-size:13px}.footer a{margin-left:18px}@media(max-width:820px){.hero{grid-template-columns:1fr;padding-top:64px}.visual{max-width:560px}.grid,.docs{grid-template-columns:1fr}.navlinks a.optional{display:none}}@media(max-width:520px){.wrap{width:min(100% - 28px,1120px)}.navlinks{gap:12px}.hero{gap:32px}.visual{padding:0}h1{font-size:48px}} diff --git a/site/templates/index.html b/site/templates/index.html new file mode 100644 index 0000000..e64ac53 --- /dev/null +++ b/site/templates/index.html @@ -0,0 +1 @@ +ScriptWidget Gallery

Continue to the ScriptWidget Gallery guide.