{title}
+{description}
+diff --git a/.prettierrc b/.prettierrc index 59cc311..066ed73 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1 @@ -{ - "bracketSameLine": true, - "printWidth": 120, - "objectWrap": "collapse" -} +{ "bracketSameLine": true, "printWidth": 120, "objectWrap": "collapse" } diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 5f79a0a..5ec2f5d 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -23,6 +23,34 @@ Use `just` for common workflows: | `just gen` | Run `build_runner` for code generation | | `just check` | Format, lint, and test in sequence | +## Website + +The public website lives in `www` as an Astro project. + +```sh +cd www +pnpm install +pnpm dev +pnpm build +``` + +Astro source files live under `www/src`: + +- `/pages` defines routes. +- `/components` holds reusable page sections and layout components. +- `/content/legal` contains the legal pages as Markdown. +- `/styles/shared.css` is the shared stylesheet for the Astro site. + +Static files that must keep exact public routes live in `www/public`, including: + +- `.well-known/apple-app-site-association` +- `.well-known/assetlinks.json` +- `_headers` +- `client-metadata.json` +- favicon and image assets + +The legal routes are `/privacy`, `/terms`, and `/csae-policy`. + ## Architecture ### Stack diff --git a/www/.gitignore b/www/.gitignore new file mode 100644 index 0000000..16d54bb --- /dev/null +++ b/www/.gitignore @@ -0,0 +1,24 @@ +# build output +dist/ +# generated types +.astro/ + +# dependencies +node_modules/ + +# logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + + +# environment variables +.env +.env.production + +# macOS-specific files +.DS_Store + +# jetbrains setting folder +.idea/ diff --git a/www/.markdownlint.json b/www/.markdownlint.json new file mode 100644 index 0000000..13a2fd8 --- /dev/null +++ b/www/.markdownlint.json @@ -0,0 +1 @@ +{ "MD033": false, "MD013": false } diff --git a/www/.prettierrc b/www/.prettierrc new file mode 100644 index 0000000..8c6d244 --- /dev/null +++ b/www/.prettierrc @@ -0,0 +1,7 @@ +{ + "bracketSameLine": true, + "printWidth": 120, + "objectWrap": "collapse", + "plugins": ["prettier-plugin-astro"], + "overrides": [{ "files": "*.astro", "options": { "parser": "astro" } }] +} diff --git a/www/astro.config.mjs b/www/astro.config.mjs new file mode 100644 index 0000000..e762ba5 --- /dev/null +++ b/www/astro.config.mjs @@ -0,0 +1,5 @@ +// @ts-check +import { defineConfig } from 'astro/config'; + +// https://astro.build/config +export default defineConfig({}); diff --git a/www/csae-policy.html b/www/csae-policy.html deleted file mode 100644 index 4df72c3..0000000 --- a/www/csae-policy.html +++ /dev/null @@ -1,127 +0,0 @@ - - -
- - - - -- This page describes the child safety standards for Lazurite by Stormlight Labs, including - our policies against child sexual abuse and exploitation (CSAE), child sexual abuse - material (CSAM), and related harmful behavior. -
-- Zero tolerance: content or behavior involving child sexual abuse, exploitation, or - endangerment is prohibited. -
- -Lazurite standards prohibit, at minimum:
-- Lazurite provides in-app pathways for users to report content, accounts, and behavior - that may violate safety standards, including CSAE concerns. -
-- Reports are reviewed as a priority category and escalated when they indicate possible - child endangerment or CSAM. -
-- Upon obtaining actual knowledge of potential CSAM, we take appropriate action under our - policies and applicable law. Actions may include: -
-- We maintain procedures to comply with applicable child safety laws and regulations, - including reporting confirmed CSAM to the National Center for Missing and Exploited - Children (NCMEC) or the relevant regional authority as required by law. -
-- If you believe a child is in immediate danger, contact local law enforcement - immediately. -
-- Child safety contact for Lazurite / Stormlight Labs: - info@stormlightlabs.org -
-- This contact is designated to receive and coordinate potential notifications related to - CSAE and CSAM concerns. -
-- We may update these standards as laws, platform requirements, and enforcement practices - evolve. Material updates will be reflected by an updated effective date. -
-- Related pages: Terms of Service and - Privacy Policy. -
-- Contact: - stormlightlabs.org - or info@stormlightlabs.org -
-The ATmosphere client that rocks.
-- Lazurite is a client for Bluesky & BlackSky built for people who want more from their social experience. - A full-featured mobile app for iOS and Android, paired with a powerful desktop companion - for macOS, Windows, and Linux. -
-
- - Material You design with offline support, smart folders, and full AT Protocol coverage. - Built with Flutter for a native feel on both platforms. -
-- A native desktop experience built with Tauri and Solid.js. Semantic search - across your saved posts, multi-column layouts, and deep AT Protocol tooling. -
-at:// URIs
- Home timeline, custom algorithmic feeds, pinned feeds with drag-to-reorder. Full thread and reply chain rendering.
-Search your saved & liked posts, discover starterpacks with the power of local semantic search with embeddings.
-Subscribe to labelers, configure per-label preferences, mute and block lists. Adult content controls with granular filtering.
-Create and manage curation and moderation lists. Browse, search, and build starter packs to share with others.
-Smart caching with local databases on both platforms. Browse cached content and queue actions while offline.
-Explore connections with a force-directed graph visualization. See mutual follows, followers, and blocking context at a glance.
-Lazurite is finishing sign-in. If the app does not reopen automatically, tap below.
- Open Lazurite - -- Lazurite is a client for Bluesky. Core app behavior runs from your device, and we do not - operate a developer backend for normal use. -
- -- Lazurite stores account session data, settings, cached content, and other app data - locally so the app can work quickly and reliably. -
-- This local data can include profile metadata, viewed posts, follows, lists, likes, - drafts, and media caches. -
-- Local data is used to keep you signed in, remember your preferences, improve loading - performance, and support offline-friendly behavior. -
-Lazurite does not sell your personal information.
-- When you use Lazurite, requests are sent directly from your device to Bluesky and - related infrastructure. -
-- Your use of Bluesky remains subject to Bluesky policies, terms, and moderation systems. -
-- If you choose to save media, Lazurite requests photo or storage permissions required by - your platform. -
-Permissions are used only for the feature you invoke.
-- Lazurite keeps local app logs to help troubleshoot issues. These logs stay on your - device unless you choose to share them. -
-Lazurite does not include ad tracking SDKs.
-- Data remains on your device until you remove it by signing out, clearing app storage, - or uninstalling the app. -
-- Because Lazurite does not run a central app backend for normal use, most data-control - actions happen on your device or through Bluesky account settings. -
-- Lazurite is not directed to children under 13, or under the minimum age required in - your jurisdiction. -
-- We may revise this policy from time to time. Material updates will be reflected by a - new effective date and app release notes when appropriate. -
-- Contact: stormlightlabs.org - or info@stormlightlabs.org -
-{description}
+The ATmosphere client that rocks.
++ Lazurite is a client for Bluesky & BlackSky built for people who want more from their + social experience. A full-featured mobile app for iOS and Android, paired with a powerful + desktop companion for macOS, Windows, and Linux. +
+{page.lead}
+ {page.alert &&{page.alert}
} +{description}
+ +Related pages: Terms of Service and Privacy Policy.
+Contact: stormlightlabs.org or info@stormlightlabs.org
+Contact: stormlightlabs.org or info@stormlightlabs.org
+Bluesky legal pages: Privacy Policy and Terms of Service.
+Contact: stormlightlabs.org or info@stormlightlabs.org
++ Lazurite is finishing sign-in. If the app does not reopen automatically, tap below. +
+ Open Lazurite +If this still fails, use your browser menu and choose "Open in app".
+- These Terms govern your use of Lazurite, a Bluesky client built by Stormlight Labs. By - installing or using Lazurite, you agree to these Terms. -
- -Lazurite is client software that helps you access Bluesky from your device.
-Lazurite does not provide the Bluesky network itself.
-- You must be legally able to agree to these Terms and meet the minimum age requirement - in your jurisdiction. -
-- We grant you a limited, non-exclusive, non-transferable, revocable license to use - Lazurite on devices you control. -
-- You may not misuse the app, break applicable law, or attempt unauthorized access to - systems or accounts. -
-- Lazurite depends on Bluesky services, and your use of Bluesky is governed by Bluesky's - own legal terms. -
-- You are responsible for your Bluesky account, credentials, and activity taken through - Lazurite. -
-- You retain rights to your content, subject to Bluesky policies and any third-party - rights. -
-- Do not use Lazurite to harass others, violate rights, distribute unlawful content, or - abuse platform infrastructure. -
-You are responsible for complying with Bluesky rules and applicable law.
-Lazurite depends on Bluesky and related third-party services.
-- If those services change, restrict, or discontinue access, features may degrade or stop - working. -
-- Lazurite is provided "as is" and "as available." We do not guarantee uninterrupted, - secure, or error-free operation. -
-- To the maximum extent permitted by law, Stormlight Labs is not liable for indirect, - incidental, or consequential damages arising from your use of Lazurite. -
-We may update, suspend, or discontinue parts of Lazurite.
-- We may update these Terms. Continued use after updates means you accept the revised - Terms. -
-- Bluesky legal pages: - Privacy Policy - and - Terms of Service. -
-- Contact: - stormlightlabs.org - or info@stormlightlabs.org -
-