diff --git a/knip.jsonc b/knip.jsonc index 2ddac00..c3d6d90 100644 --- a/knip.jsonc +++ b/knip.jsonc @@ -14,6 +14,7 @@ // Loaded through Tailwind CSS directives rather than JavaScript imports. // Optional documentation presentation layer; Markdown remains authoritative. // Spawned by the code-health checker rather than imported. + "@fontsource-variable/geist", "jscpd", "tailwindcss" ], diff --git a/landing-astro/package.json b/landing-astro/package.json index 37a6beb..54ab1a5 100644 --- a/landing-astro/package.json +++ b/landing-astro/package.json @@ -13,9 +13,9 @@ "dependencies": { "@astrojs/react": "7.0.0", "@astrojs/sitemap": "^3.7.3", - "@saas-maker/motion": "github:sass-maker/ui-library#v0.1.14&path:/packages/motion", - "@saas-maker/templates": "github:sass-maker/ui-library#v0.1.14&path:/packages/templates", - "@saas-maker/ui": "github:sass-maker/ui-library#v0.1.14&path:/packages/ui", + "@saas-maker/motion": "github:sass-maker/ui-library#v0.1.20&path:/packages/motion", + "@saas-maker/templates": "github:sass-maker/ui-library#v0.1.20&path:/packages/templates", + "@saas-maker/ui": "github:sass-maker/ui-library#v0.1.20&path:/packages/ui", "@tailwindcss/vite": "4.3.3", "astro": "7.2.8", "lucide-react": "1.48.0", diff --git a/landing-astro/src/components/Head.astro b/landing-astro/src/components/Head.astro index f5705dd..4adccbe 100644 --- a/landing-astro/src/components/Head.astro +++ b/landing-astro/src/components/Head.astro @@ -28,7 +28,7 @@ const SITE_URL = 'https://read.significanthobbies.com'; >} - + diff --git a/landing-astro/src/content/reader.json b/landing-astro/src/content/reader.json index 7d89b81..53362ec 100644 --- a/landing-astro/src/content/reader.json +++ b/landing-astro/src/content/reader.json @@ -3,7 +3,21 @@ "page": { "title": "Reader — your saved-link inbox", "description": "Save links from the web. Find them, pull their content, and mark them read through ChatGPT.", - "theme": "paper", + "mode": "dark", + "fromApp": { + "background": "#09090B", + "foreground": "#FAFAFA", + "card": "#18181B", + "surface": "#18181B", + "muted": "#27272A", + "mutedForeground": "#A1A1AA", + "border": "#3F3F46", + "brand": "#E27A5C", + "brandForeground": "#09090B", + "destructive": "#F87171", + "radius": "12px", + "fonts": { "sans": "geist", "display": "geist", "mono": "geist-mono" } + }, "icon": "icon.svg", "assetBase": "/", "canonical": "https://read.significanthobbies.com/", @@ -69,7 +83,6 @@ "height": 900, "chrome": "browser" }, - "backdrop": "footer-art/reader-precise-original-v1.webp", "caption": "Illustrative interface · example links, not a customer's inbox" }, "sections": [ diff --git a/landing-astro/src/styles/landing.css b/landing-astro/src/styles/landing.css index d7ad71c..381a9d8 100644 --- a/landing-astro/src/styles/landing.css +++ b/landing-astro/src/styles/landing.css @@ -1,7 +1,9 @@ -:root { --paper: #f0eee6; --paper-light: #faf8f1; --ink: #20231f; --ink-soft: #565b52; --line: rgba(32,35,31,.18); --rust: #b74d33; } +@import "@fontsource-variable/geist"; + +:root { --paper: #09090b; --paper-light: #18181b; --ink: #fafafa; --ink-soft: #a1a1aa; --line: #3f3f46; --rust: #e27a5c; color-scheme: dark; } * { box-sizing: border-box; } -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.55; } -a { color: inherit; text-decoration: none; } +body { margin: 0; background: var(--paper); color: var(--ink); font-family: "Geist Variable", Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; line-height: 1.55; } +a { color: var(--rust); text-decoration: none; } a:focus-visible { outline: 2px solid var(--rust); outline-offset: 5px; } .page { min-height: 100dvh; display: flex; flex-direction: column; } .header { border-bottom: 1px solid var(--line); } @@ -10,8 +12,8 @@ a:focus-visible { outline: 2px solid var(--rust); outline-offset: 5px; } .btn-signin { font-size: .9rem; border-bottom: 1px solid var(--ink); } .hero { max-width: 76rem; width: 100%; margin: auto; padding: 6rem 2rem; display: grid; grid-template-columns: 1.2fr 1fr; gap: 5rem; align-items: center; } .eyebrow { font-size: .75rem; text-transform: uppercase; letter-spacing: .14em; color: var(--rust); font-weight: 650; } -h1 { font-family: Georgia, serif; font-weight: 400; font-size: clamp(2.8rem, 4.8vw, 4.6rem); line-height: 1.08; letter-spacing: -.035em; margin: 1.3rem 0; } -.btn-secondary { display: inline-flex; min-height: 3rem; align-items: center; padding: .75rem 1.1rem; border: 1px solid var(--ink); font-size: .9rem; } +h1 { font-family: inherit; font-weight: 600; font-size: clamp(2.8rem, 4.8vw, 4.6rem); line-height: 1.08; letter-spacing: -.035em; margin: 1.3rem 0; } +.btn-secondary { display: inline-flex; min-height: 3rem; align-items: center; padding: .75rem 1.1rem; border: 1px solid var(--line); font-size: .9rem; } .btn-secondary:hover { background: var(--paper-light); } .site-footer { max-width: 76rem; width: 100%; margin: auto; border-top: 1px solid var(--line); padding: 1.5rem 2rem; display: flex; flex-wrap: wrap; justify-content: space-between; gap: 1rem; font-size: .8rem; color: var(--ink-soft); } @media (max-width: 850px) { .hero { grid-template-columns: 1fr; gap: 3rem; padding: 3rem 2rem; } } diff --git a/package.json b/package.json index a2ee63b..a85ff6b 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ ] }, "dependencies": { + "@fontsource-variable/geist": "5.3.0", "@mozilla/readability": "0.6.0", "@radix-ui/react-slot": "1.3.3", "@saas-maker/app-health": "https://github.com/sass-maker/app-health/releases/download/node-v0.4.0/saas-maker-app-health-0.4.0.tgz", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f0d2042..fce6890 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -37,6 +37,9 @@ importers: .: dependencies: + '@fontsource-variable/geist': + specifier: 5.3.0 + version: 5.3.0 '@mozilla/readability': specifier: 0.6.0 version: 0.6.0 @@ -165,14 +168,14 @@ importers: specifier: ^3.7.3 version: 3.7.3 '@saas-maker/motion': - specifier: github:sass-maker/ui-library#v0.1.14&path:/packages/motion - version: https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/motion(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + specifier: github:sass-maker/ui-library#v0.1.20&path:/packages/motion + version: https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/motion(react-dom@19.3.0(react@19.3.0))(react@19.3.0) '@saas-maker/templates': - specifier: github:sass-maker/ui-library#v0.1.14&path:/packages/templates - version: https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/templates(@saas-maker/motion@https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/motion(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(@saas-maker/ui@https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tailwindcss@4.3.3))(astro@7.2.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.6.0)(jiti@2.7.0)(terser@5.16.9)(tsx@4.23.1)(yaml@2.9.0))(react@19.3.0) + specifier: github:sass-maker/ui-library#v0.1.20&path:/packages/templates + version: https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/templates(@saas-maker/motion@https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/motion(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(@saas-maker/ui@https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tailwindcss@4.3.3))(astro@7.2.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.6.0)(jiti@2.7.0)(terser@5.16.9)(tsx@4.23.1)(yaml@2.9.0))(react@19.3.0) '@saas-maker/ui': - specifier: github:sass-maker/ui-library#v0.1.14&path:/packages/ui - version: https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tailwindcss@4.3.3) + specifier: github:sass-maker/ui-library#v0.1.20&path:/packages/ui + version: https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tailwindcss@4.3.3) '@tailwindcss/vite': specifier: 4.3.3 version: 4.3.3(vite@8.3.4(@types/node@25.6.0)(esbuild@0.28.1)(jiti@2.7.0)(terser@5.16.9)(tsx@4.23.1)(yaml@2.9.0)) @@ -1135,6 +1138,9 @@ packages: '@floating-ui/utils@0.2.12': resolution: {integrity: sha512-HpCo8tmWzLVad5s2d19EhAz5zqrrQ6s69qd6moPMQvkOuSwDT1YgRfWSVuc4ennqrgv3OHppiOGMQ7oC13yIww==} + '@fontsource-variable/geist@5.3.0': + resolution: {integrity: sha512-j0m+vLQuG5XAYoHtGCVu0spvlGreR3EzpECUVzkFmI1mTVnAO38l/NEPDCFgZ177JxzYJCLSmTQibIiYPilGrA==} + '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} @@ -2745,7 +2751,7 @@ packages: resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} '@saas-maker/app-health@https://github.com/sass-maker/app-health/releases/download/node-v0.4.0/saas-maker-app-health-0.4.0.tgz': - resolution: {tarball: https://github.com/sass-maker/app-health/releases/download/node-v0.4.0/saas-maker-app-health-0.4.0.tgz} + resolution: {integrity: sha512-njyrKewuAGMNZaHtE3bGl9nJt4kxR/oanZ12kDguClJnRly1YkEEOvoTqwRd7tsESiTzoogbU1J6MN0f6ZBAjg==, tarball: https://github.com/sass-maker/app-health/releases/download/node-v0.4.0/saas-maker-app-health-0.4.0.tgz} version: 0.4.0 peerDependencies: express: '>=4.19.0 <6' @@ -2756,22 +2762,22 @@ packages: hono: optional: true - '@saas-maker/motion@https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/motion': - resolution: {path: /packages/motion, tarball: https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89} - version: 0.1.14 + '@saas-maker/motion@https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/motion': + resolution: {path: /packages/motion, tarball: https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe} + version: 0.1.20 - '@saas-maker/templates@https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/templates': - resolution: {path: /packages/templates, tarball: https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89} - version: 0.1.14 + '@saas-maker/templates@https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/templates': + resolution: {path: /packages/templates, tarball: https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe} + version: 0.1.20 peerDependencies: '@saas-maker/motion': 0.x '@saas-maker/ui': 0.x astro: '>=7' react: '>=19' - '@saas-maker/ui@https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/ui': - resolution: {path: /packages/ui, tarball: https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89} - version: 0.1.14 + '@saas-maker/ui@https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/ui': + resolution: {path: /packages/ui, tarball: https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe} + version: 0.1.20 peerDependencies: react: '>=19' react-dom: '>=19' @@ -6059,6 +6065,8 @@ snapshots: '@floating-ui/utils@0.2.12': {} + '@fontsource-variable/geist@5.3.0': {} + '@img/colour@1.1.0': {} '@img/sharp-darwin-arm64@0.35.5': @@ -7447,22 +7455,22 @@ snapshots: optionalDependencies: hono: 4.13.1 - '@saas-maker/motion@https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/motion(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': + '@saas-maker/motion@https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/motion(react-dom@19.3.0(react@19.3.0))(react@19.3.0)': dependencies: motion: 13.4.3(react-dom@19.3.0(react@19.3.0))(react@19.3.0) transitivePeerDependencies: - react - react-dom - '@saas-maker/templates@https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/templates(@saas-maker/motion@https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/motion(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(@saas-maker/ui@https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tailwindcss@4.3.3))(astro@7.2.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.6.0)(jiti@2.7.0)(terser@5.16.9)(tsx@4.23.1)(yaml@2.9.0))(react@19.3.0)': + '@saas-maker/templates@https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/templates(@saas-maker/motion@https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/motion(react-dom@19.3.0(react@19.3.0))(react@19.3.0))(@saas-maker/ui@https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tailwindcss@4.3.3))(astro@7.2.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.6.0)(jiti@2.7.0)(terser@5.16.9)(tsx@4.23.1)(yaml@2.9.0))(react@19.3.0)': dependencies: - '@saas-maker/motion': https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/motion(react-dom@19.3.0(react@19.3.0))(react@19.3.0) - '@saas-maker/ui': https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tailwindcss@4.3.3) + '@saas-maker/motion': https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/motion(react-dom@19.3.0(react@19.3.0))(react@19.3.0) + '@saas-maker/ui': https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tailwindcss@4.3.3) astro: 7.2.8(@emnapi/core@1.11.2)(@emnapi/runtime@1.11.3)(@types/node@25.6.0)(jiti@2.7.0)(terser@5.16.9)(tsx@4.23.1)(yaml@2.9.0) lucide-react: 1.48.0(react@19.3.0) react: 19.3.0 - '@saas-maker/ui@https://codeload.github.com/sass-maker/ui-library/tar.gz/404a34ef1b1f0ecebe76015d73bd8133bd255c89#path:/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tailwindcss@4.3.3)': + '@saas-maker/ui@https://codeload.github.com/sass-maker/ui-library/tar.gz/1afddb16e172c02e2d1a86ed780330ecb3dd84fe#path:/packages/ui(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.3.0(react@19.3.0))(react@19.3.0)(tailwindcss@4.3.3)': dependencies: '@tanstack/react-table': 9.2.4(react-dom@19.3.0(react@19.3.0))(react@19.3.0) class-variance-authority: 0.7.1 diff --git a/src/components/LoginClient.tsx b/src/components/LoginClient.tsx index e2a47cd..3bbd1e6 100644 --- a/src/components/LoginClient.tsx +++ b/src/components/LoginClient.tsx @@ -56,7 +56,7 @@ export default function LoginClient() { if (redirecting) { return ( -
Loading your library...
@@ -66,7 +66,7 @@ export default function LoginClient() { } return ( -diff --git a/src/styles/app-tokens.css b/src/styles/app-tokens.css index 293ba90..0803cbb 100644 --- a/src/styles/app-tokens.css +++ b/src/styles/app-tokens.css @@ -19,9 +19,9 @@ --accent-5: #52525b; --accent-6: #71717a; --accent-7: #a1a1aa; - --accent-8: #d4d4d8; + --accent-8: #e27a5c; --accent-9: #fafafa; --accent-10: #e4e4e7; - --accent-11: #f4f4f5; + --accent-11: #f0a08a; --accent-12: #ffffff; } diff --git a/src/styles/globals.css b/src/styles/globals.css index b8a16d1..252ce5a 100644 --- a/src/styles/globals.css +++ b/src/styles/globals.css @@ -1,3 +1,4 @@ +@import "@fontsource-variable/geist"; @import "tailwindcss"; @import "./app-tokens.css"; @@ -5,7 +6,7 @@ body { margin: 0; background: var(--gray-1); color: var(--gray-12); - font-family: Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + font-family: "Geist Variable", Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; -webkit-font-smoothing: antialiased; } button, a, input { -webkit-tap-highlight-color: transparent; }