# Ink website Marketing and download site for [Ink](../Ink), a calm, offline Markdown notes app. Astro (static output), TypeScript, plain CSS, [Bun](https://bun.sh). No analytics, no cookies, no third-party requests. ## Run ```sh bun install bun run dev # http://localhost:4321 bun run build # astro check + static build into dist/ bun run preview # serve dist/ ``` ## Where things live | What | Where | | --- | --- | | Name, version, size, checksum, download and repo URLs | `src/config.ts` (the only file to edit for a release) | | Changelog entries | `src/content/changelog/*.md` (front matter: `version`, `date`, `title`, `prerelease`) | | Screenshots | `src/assets/screens/`, described in `src/lib/screens.ts` | | Theme tokens | top of `src/styles/global.css` | | Pages | `src/pages/` | ### Direct downloads Every download button links straight to the file (`platforms.linux.url` in `src/config.ts`), with no intermediate page. Windows visitors get the .exe on the same button; macOS and phone visitors are sent to `/download/`, because the Linux AppImage is no use to them. Point `url` at any direct file URL. By default it is the release on git.joji.li, which is a plain download link. Don't host the 157 MB file with the site itself on GitHub Pages (100 MB per-file limit) or Cloudflare Pages (25 MB); use Releases, R2/S3 or a CDN. ### Releasing a new version 1. Build the app (`bun run dist` in the Ink repo) and upload the AppImage to your release page. 2. In `src/config.ts` update `version`, `releaseDate`, the platform `bytes` and `sha256` (`sha256sum Ink-*.AppImage`). 3. Add `src/content/changelog/.md`. The build warns if the newest entry differs from `config.version`. ### Screenshots Each screenshot is a name plus two theme variants, 16:10, 2400x1500: ``` src/assets/screens/editor-dark.png editor-light.png ``` A real `.png`/`.webp`/`.jpg` automatically replaces a placeholder `.svg` of the same name, and a bare `editor.png` is used for both themes. `` handles sizes, lazy loading and picking the image for the visitor's colour scheme. **Regenerating them from the real app** (read only; nothing in the Ink repo is touched): ```sh bun run screenshots # = sh scripts/capture/run.sh ``` This runs Ink headless (Electron, `--ozone-platform=headless`) against a throw-away notes folder that `scripts/capture/seed-vault.cjs` builds in `/tmp` (about 40 notes, a board, a canvas, a few page versions, tag colours). `scenes.cjs` drives the UI the way a user would (Ctrl+K, `/`, Ctrl+G ...) and saves both themes straight into `src/assets/screens/`. Link-card previews are stubbed so no network is used. Edit the seed or a scene and re-run to change a shot. Needs the Ink repo built and installed next to this one (`INK_APP=/path/to/Ink` overrides the location; `SCENES=editor,canvas` limits what is captured). To add a new screenshot, add it to `src/lib/screens.ts`, add a scene, and run `bun run assets` for a placeholder in the meantime. ## Deploy The output is plain static files in `dist/`. Set two environment variables at build time: - `SITE_URL`: the public origin, e.g. `https://ink.example` (used for canonical URLs, sitemap, Open Graph). - `BASE_PATH`: only for a sub-path such as a GitHub Pages project site (`/ink-website`). Default `/`. **Cloudflare Pages / Netlify**: build command `bun run build`, output directory `dist`, set `SITE_URL`. **GitHub Pages**: `.github/workflows/deploy.yml` builds with Bun and publishes `dist/`. Edit `SITE_URL` and `BASE_PATH` in it, then enable *Settings → Pages → Source: GitHub Actions*. Add `Sitemap: /sitemap-index.xml` to `public/robots.txt` once the URL is known. ## Notes - `public/og.png` (1200x630) is a static file; replace it if the tagline changes. - The `typescript` dependency is pinned to 6.x because `astro check` does not support TypeScript 7 yet. - Builds are unsigned and macOS is "coming soon" by design: see `platforms.*.available` in `config.ts`.