diff --git a/AGENTS.md b/AGENTS.md index 1019c05..9c19b14 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -12,6 +12,7 @@ Josselin Perrus's personal site: an Astro 7 static site served by Cloudflare Wor - `src/content.config.ts`: the content collection, built from `articles/*.md` and `daily-logs/*.md` in the submodule. - `src/pages/index.astro`: the home. Its Writing list holds the articles, not the activity logs, and picking a topic on the map shows only the articles about it. An article's topics are its `topics` frontmatter field (`customer-success`, `product`, `ai-agents`: each one that makes up 30% or more of it). - `src/pages/articles/[slug].astro`: the page of every article and activity log. The Markdown goes through the plugins in `src/lib/` set in `astro.config.mjs`: the `# Title` line is dropped, the headings are renumbered from h2, and `rehype-article.mjs` shapes figures, YouTube embeds (moved to youtube-nocookie.com) and tables for `src/styles/prose.css`. In a table, a row whose cells are all bold is highlighted, and a paragraph starting with `Table:` right after it, past a blank line, is its caption. An image alone in its paragraph is captioned with its title, or with its alt text when that has a space. +- `src/pages/apps/`: `/apps/`, which lists the apps, and each app's own full-screen page at `/apps//`. An app is one Astro file with its markup, styles and script, on the bare `src/layouts/App.astro`. Apps are strictly front-end: they run in the visitor's browser and keep their work there, in `localStorage`. The navigation doesn't link to `/apps/` yet; each app's title does. The card images are in `src/assets/apps/`. - `src/data/projects.ts`: the projects, with their screenshots in `src/assets/projects/`, and which articles belong to each, by article id. - `docs/document-sharing.md`: how the encrypted portfolio links on `/documents/` work and how to create them. - `wrangler.jsonc`: the Cloudflare Worker `meaningfool`, which serves `dist/` as static assets. diff --git a/src/assets/apps/halftone-painter.jpg b/src/assets/apps/halftone-painter.jpg new file mode 100644 index 0000000..fd28a14 Binary files /dev/null and b/src/assets/apps/halftone-painter.jpg differ diff --git a/src/assets/apps/halftone-pattern-studio.jpg b/src/assets/apps/halftone-pattern-studio.jpg new file mode 100644 index 0000000..d619c29 Binary files /dev/null and b/src/assets/apps/halftone-pattern-studio.jpg differ diff --git a/src/layouts/App.astro b/src/layouts/App.astro new file mode 100644 index 0000000..2c9a27a --- /dev/null +++ b/src/layouts/App.astro @@ -0,0 +1,51 @@ +--- +// The page around a full-screen app: the site's head, without its header, footer or background, because the app takes +// the whole window. The app brings its own styles. +import Favicons from '../components/Favicons.astro'; +import { SITE_SHARE } from '../lib/share'; + +interface Props { + title: string; + description: string; +} + +const { title, description } = Astro.props; +const canonical = new URL(Astro.url.pathname, Astro.site).toString(); +const ogImage = new URL(SITE_SHARE.path, Astro.site).toString(); +--- + + + + + + + + + {title} + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/pages/apps/halftone-painter.astro b/src/pages/apps/halftone-painter.astro new file mode 100644 index 0000000..e4602a6 --- /dev/null +++ b/src/pages/apps/halftone-painter.astro @@ -0,0 +1,580 @@ +--- +// The Halftone Painter: raise and lower the land of a map printed in dots. It runs entirely in the browser, keeps the +// painting there (localStorage), and opens on the site's own topic map. +import App from '../../layouts/App.astro'; +--- + + + + +
+
+ + +
+ +
+ + + +
+
+ +
+
+ +
+ +
+ +
+
+ + + + diff --git a/src/pages/apps/halftone-pattern-studio.astro b/src/pages/apps/halftone-pattern-studio.astro new file mode 100644 index 0000000..efe238c --- /dev/null +++ b/src/pages/apps/halftone-pattern-studio.astro @@ -0,0 +1,857 @@ +--- +// The Halftone Pattern Studio: generate halftone rings and bands, place them on a page and export them. It runs entirely +// in the browser and keeps the saved patterns there (localStorage). It opens on the site's own corner pattern. +import App from '../../layouts/App.astro'; +--- + + + + +
+ +
+ + + +
+
+ +
+
+ + +
+
+ +
+
+ + +
+
+
+ + +
+ + + + diff --git a/src/pages/apps/index.astro b/src/pages/apps/index.astro new file mode 100644 index 0000000..8d61cbf --- /dev/null +++ b/src/pages/apps/index.astro @@ -0,0 +1,155 @@ +--- +// The apps, each with its own full-screen page. The navigation doesn't link here yet: the way in is the address, and +// each app's title links back here. +import { Image } from 'astro:assets'; +import Layout from '../../layouts/Layout.astro'; +import halftonePainter from '../../assets/apps/halftone-painter.jpg'; +import halftonePatternStudio from '../../assets/apps/halftone-pattern-studio.jpg'; + +const title = 'Apps | meaningfool'; +const description = 'Small tools by Josselin Perrus that run in your browser: a painter and a pattern studio for halftone dots.'; + +const apps = [ + { + href: '/apps/halftone-painter/', + name: 'Halftone Painter', + line: 'Sculpt a map made of dots: raise and lower the land, then export it.', + screenshot: halftonePainter, + }, + { + href: '/apps/halftone-pattern-studio/', + name: 'Halftone Pattern Studio', + line: 'Generate halftone rings and bands, place them on a page and export them.', + screenshot: halftonePatternStudio, + }, +]; +--- + + +
+
+

Apps

+

Small tools that run in your browser

+
+
    + {apps.map((app) => ( +
  • +
    + +
    +

    + {app.name} +

    +

    {app.line}

    +
  • + ))} +
+
+
+ +