Add WordCraft, SoundCraft, DeckCraft, CADCraft, and GridCraft marketing pages (#79)

## Summary

Adds product definitions and marketing page assets for the five
remaining Crafting Apps (WordCraft, SoundCraft, DeckCraft, CADCraft, and
GridCraft), and bumps all Crafting Apps in `crafting-app-releases.ts` to
their latest published GitHub release versions.

### Changes

- **Data & Definitions (`crafting-apps.ts`,
`crafting-app-releases.ts`)**:
- Added `wordcraft`, `soundcraft`, `deckcraft`, `cadcraft`, and
`gridcraft` to `CraftAppSlug` and `CRAFTING_APPS`.
  - Added feature sets, ledes, pitches, and release entries.
  - Bumped all app releases to latest GitHub releases:
    - `photocraft`: `0.7.0`
    - `vectorcraft`: `0.9.0`
    - `filmcraft`: `0.6.0`
    - `lightcraft`: `0.6.0`
    - `pdfcraft`: `0.6.0`
    - `effectcraft`: `0.8.0`
    - `designcraft`: `0.6.0`
    - `wordcraft`: `0.5.0`
    - `soundcraft`: `0.5.0`
    - `deckcraft`: `0.5.0`
    - `cadcraft`: `0.5.0`
    - `gridcraft`: `0.5.0`
- Extended `COUNT_WORDS` to support twelve apps and updated category
coverage on `/apps`.
- Maintained copy rules: accurately describing categories and workflows
without naming third-party products.
- **Branding & Themes (`globals.css`)**:
- Added theme color identities (`--app`, `--app-ink`) for all five apps
across light and dark themes with full AA contrast compliance.
- **Visual Assets (`public/images/apps/<slug>/`)**:
- Generated 256px WebP icons, 1600x1000 WebP screenshots, and 1200x630
OG share cards for each new app.

### Testing

- `npm run typecheck` (`tsc --noEmit`) passes cleanly.
- `npm run build` generates all 12 app pages statically (44/44 static
pages).
This commit is contained in:
Dylan M. Taylor authored and GitHub committed 2026-10-11 13:09:48 -04:00
1 parent b45df084b8
commit 165a4b272c
37 files changed
+391 -10

No files matched your search

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 98 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 78 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 116 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 92 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 113 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 106 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 118 KiB

@@ -45,7 +45,7 @@ import { siteUrl } from "@/lib/links";
const TITLE = "Crafting Apps: open-source creative tools";
const COVERAGE =
"Image editing, vector illustration, video, photography, PDFs, motion graphics and page layout";
"Image editing, vector illustration, video, photography, PDFs, motion graphics, page layout, word processing, audio, presentations, CAD and spreadsheets";
const DESCRIPTION = `${COVERAGE}: ${CRAFTING_APPS_COUNT_WORD.toLowerCase()} native, open-source apps from the ArtCraft team, built in Rust and free to use.`;
export const metadata: Metadata = {
@@ -324,6 +324,11 @@ html[data-ruler="on"]::-webkit-scrollbar {
.app-pdfcraft { --app: #12a58a; --app-ink: #0a7563; }
.app-effectcraft { --app: #e0368f; --app-ink: #b0206c; }
.app-designcraft { --app: #7bb51c; --app-ink: #457008; }
.app-wordcraft { --app: #4c6ef5; --app-ink: #253e99; }
.app-soundcraft { --app: #14a9c4; --app-ink: #0b6f82; }
.app-deckcraft { --app: #f26b1d; --app-ink: #ad4306; }
.app-cadcraft { --app: #14a3c7; --app-ink: #09596d; }
.app-gridcraft { --app: #1f9d55; --app-ink: #136938; }
:root[data-theme="dark"] .app-photocraft { --app-ink: #7fb0ff; }
:root[data-theme="dark"] .app-vectorcraft { --app-ink: #ff8a70; }
:root[data-theme="dark"] .app-filmcraft { --app-ink: #b69cff; }
@@ -331,6 +336,11 @@ html[data-ruler="on"]::-webkit-scrollbar {
:root[data-theme="dark"] .app-pdfcraft { --app-ink: #3fd6b8; }
:root[data-theme="dark"] .app-effectcraft { --app-ink: #ff7ab8; }
:root[data-theme="dark"] .app-designcraft { --app-ink: #a6e04a; }
:root[data-theme="dark"] .app-wordcraft { --app-ink: #8da2fb; }
:root[data-theme="dark"] .app-soundcraft { --app-ink: #52d1ea; }
:root[data-theme="dark"] .app-deckcraft { --app-ink: #ff9657; }
:root[data-theme="dark"] .app-cadcraft { --app-ink: #4cc7e6; }
:root[data-theme="dark"] .app-gridcraft { --app-ink: #5ee089; }
@media (prefers-color-scheme: dark) {
:root:not([data-theme="light"]) .app-photocraft { --app-ink: #7fb0ff; }
:root:not([data-theme="light"]) .app-vectorcraft { --app-ink: #ff8a70; }
@@ -339,6 +349,11 @@ html[data-ruler="on"]::-webkit-scrollbar {
:root:not([data-theme="light"]) .app-pdfcraft { --app-ink: #3fd6b8; }
:root:not([data-theme="light"]) .app-effectcraft { --app-ink: #ff7ab8; }
:root:not([data-theme="light"]) .app-designcraft { --app-ink: #a6e04a; }
:root:not([data-theme="light"]) .app-wordcraft { --app-ink: #8da2fb; }
:root:not([data-theme="light"]) .app-soundcraft { --app-ink: #52d1ea; }
:root:not([data-theme="light"]) .app-deckcraft { --app-ink: #ff9657; }
:root:not([data-theme="light"]) .app-cadcraft { --app-ink: #4cc7e6; }
:root:not([data-theme="light"]) .app-gridcraft { --app-ink: #5ee089; }
}
/* Plan cell: a color wash pooling under the index tab and fading into the
@@ -214,11 +214,16 @@ export const CRAFT_LAUNCHER_RELEASE: CraftRelease | null = craftRelease(
// Every app must be listed, so a new slug fails the type check until it is.
export const CRAFT_APP_RELEASES: Record<CraftAppSlug, CraftRelease | null> = {
photocraft: craftRelease("0.5.0"),
vectorcraft: craftRelease("0.7.0"),
filmcraft: craftRelease("0.4.0"),
lightcraft: craftRelease("0.4.0"),
pdfcraft: craftRelease("0.4.0"),
effectcraft: craftRelease("0.6.0"),
designcraft: craftRelease("0.4.0"),
photocraft: craftRelease("0.7.0"),
vectorcraft: craftRelease("0.9.0"),
filmcraft: craftRelease("0.6.0"),
lightcraft: craftRelease("0.6.0"),
pdfcraft: craftRelease("0.6.0"),
effectcraft: craftRelease("0.8.0"),
designcraft: craftRelease("0.6.0"),
wordcraft: craftRelease("0.5.0"),
soundcraft: craftRelease("0.5.0"),
deckcraft: craftRelease("0.5.0"),
cadcraft: craftRelease("0.5.0"),
gridcraft: craftRelease("0.5.0"),
};
@@ -27,7 +27,12 @@ export type CraftAppSlug =
| "lightcraft"
| "pdfcraft"
| "effectcraft"
| "designcraft";
| "designcraft"
| "wordcraft"
| "soundcraft"
| "deckcraft"
| "cadcraft"
| "gridcraft";
export type CraftPlatform = "macOS" | "Windows" | "Linux" | "Web";
@@ -535,9 +540,365 @@ export const CRAFTING_APPS: CraftApp[] = [
},
],
},
{
slug: "wordcraft",
prefix: "Word",
category: "Word processing",
status: "In development",
headline: ["A fast, open-source ", "word processor", ", rebuilt in pure Rust."],
pitch: "Fast, open-source word processing, rebuilt in pure Rust.",
lede: "The ribbon, styles, tables, track changes, references and mail merge in a native word processor that reads and writes .docx. Open source, offline, and fast.",
schemaCategory: "BusinessApplication",
platforms: ["macOS", "Windows", "Linux", "Web"],
rustVersion: "1.90",
features: [
{
title: "The ribbon you know",
body: "Tabs, groups, shortcuts and the live Styles gallery. Enter continues a list, Tab demotes it, and formatting works as your hands expect.",
},
{
title: "Real document formats",
body: "Opens and saves .docx natively, imports and exports .odt, .rtf, .html, .md and .txt, and exports clean PDF with selectable text.",
},
{
title: "Instant layout",
body: "Paragraph layout is cached: typing in a 188-page document re-lays it out in about 1.4 ms, with pages rendered on demand.",
},
{
title: "Track changes & review",
body: "Comment balloons in the margin, accept and reject changes, document comparison, plus offline spelling and grammar as you type.",
},
{
title: "Academic & business references",
body: "Generate tables of contents, footnotes, citations and bibliographies in APA, MLA, Chicago and IEEE styles, indexes, and captions.",
},
{
title: "Agent-ready commands",
body: "389 discrete commands drive the ribbon, keyboard shortcuts, a command-line tool, a JSON control channel and an MCP server.",
},
],
shots: [
{
file: "hero.webp",
source: "hero.png",
caption: "The Open Studio Handbook — ribbon, styles and navigation",
alt: "WordCraft with the Home tab of the ribbon open over a two-page document titled The Open Studio Handbook, the Navigation pane on the left, and the Styles gallery showing live previews",
},
{
file: "review.webp",
source: "review.png",
caption: "Review and track changes",
alt: "WordCraft's Review tab with Track Changes on, inline insertions and deletions, and margin comment balloons",
},
{
file: "references.webp",
source: "references.png",
caption: "Table of contents and citations",
alt: "WordCraft's References tab showing a table of contents with dot leaders on page one and citations on page two",
},
{
file: "layout.webp",
source: "layout.png",
caption: "Drop caps and text wrap",
alt: "WordCraft layout tab showing a three-line drop cap, text wrapping around an object, and margin line numbers",
},
{
file: "dark.webp",
source: "dark.png",
caption: "Dark mode with formatting marks",
alt: "WordCraft in dark mode with the Insert tab open and formatting marks visible",
},
],
},
{
slug: "soundcraft",
prefix: "Sound",
category: "Digital audio workstation",
status: "In development",
headline: ["Professional audio recording and ", "mixing", ", rebuilt in pure Rust."],
pitch: "Professional audio recording, editing and mixing in pure Rust.",
lede: "Dedicated Edit and Mix windows, multitrack audio and MIDI, ten inserts and sends per track, surround panning, and offline AudioSuite in a native DAW built from scratch.",
schemaCategory: "MultimediaApplication",
platforms: ["macOS", "Windows", "Linux", "Web"],
rustVersion: "1.90",
features: [
{
title: "The studio workflow",
body: "Dedicated Edit and Mix windows, Shuffle, Slip, Spot and Grid modes, comping playlists, memory locations, and single-key Commands Focus shortcuts.",
},
{
title: "Full mixing console",
body: "Ten inserts and ten sends per track, busses, aux inputs, VCAs, routing folders, solo-in-place, and automatic plugin delay compensation.",
},
{
title: "Live automation",
body: "Write, Touch, Latch and Trim automation passes recorded live for volume, pan, mutes, sends and every plugin parameter.",
},
{
title: "Original plugins & CLAP support",
body: "Built-in EQ, dynamic processors, reverbs, delays, modulation, synthesisers, plus support for loading external CLAP plugins.",
},
{
title: "MIDI & notation",
body: "Piano-roll MIDI editor with velocity lane, step input, quantize, transposition, score notation editor, and Audio-to-MIDI pitch detection.",
},
{
title: "Surround & video sync",
body: "Surround panning up to 9.1.6, live speaker rendering, and a dedicated picture track with video playback synchronized to the playhead.",
},
],
shots: [
{
file: "hero.webp",
source: "edit.png",
caption: "Edit window — arranging and editing the demo session",
alt: "SoundCraft Edit window showing audio waveforms, MIDI tracks, rulers, markers and transport controls for a multi-track session",
},
{
file: "mix.webp",
source: "mix.png",
caption: "Mix console with inserts and sends",
alt: "SoundCraft Mix window with ten inserts and sends per track, pan knobs, faders, meters and an EQ plugin window",
},
{
file: "midi.webp",
source: "midi.png",
caption: "Piano-roll MIDI editor",
alt: "SoundCraft MIDI editor showing note velocity lanes and piano roll editing",
},
{
file: "automation.webp",
source: "automation.png",
caption: "Breakpoint automation and memory locations",
alt: "SoundCraft displaying volume automation curves on a track alongside the Memory Locations window",
},
{
file: "surround.webp",
source: "surround.png",
caption: "Immersive surround renderer",
alt: "SoundCraft Renderer window displaying a 7.1.4 surround speaker layout and spatial panners",
},
],
},
{
slug: "deckcraft",
prefix: "Deck",
category: "Presentations & slide shows",
status: "In development",
headline: ["Fast, dynamic slide ", "presentations", ", in pure Rust."],
pitch: "Build and deliver dynamic slide presentations, in pure Rust.",
lede: "Slide masters, themes, 150+ vector shapes, transitions, animations and presenter view in a native app that opens and saves presentation files. No subscription, no cloud.",
schemaCategory: "BusinessApplication",
platforms: ["macOS", "Windows", "Linux", "Web"],
rustVersion: "1.90",
features: [
{
title: "Master slides & themes",
body: "Slide masters and eleven layouts with inheriting placeholders, eight original themes with font and colour schemes, sections, and presenter notes.",
},
{
title: "Vector shapes & drawing",
body: "Over 150 preset shapes with adjustment handles, sticky connectors, curve booleans, gradient fills, and outline styling.",
},
{
title: "Transitions & animation",
body: "Slide transitions including Morph, entrance, emphasis, exit and motion-path animations, with by-paragraph builds.",
},
{
title: "Presenter view",
body: "Full-screen slide show delivery with speaker notes, upcoming slide previews, elapsed timers, rehearsal timings, and pen drawing.",
},
{
title: "Format compatibility",
body: "Open and save presentation files (.pptx), export vector PDF slides and handouts, and render slide images.",
},
{
title: "Automated with MCP",
body: "Over 200 commands scriptable from the CLI, a JSON control channel, and an MCP server for autonomous agents.",
},
],
shots: [
{
file: "hero.webp",
source: "editor.png",
caption: "Slide editor with process diagram",
alt: "DeckCraft slide editor showing the ribbon, slide thumbnails, notes panel, and a vector process diagram on the canvas",
},
{
file: "shape-format.webp",
source: "shape-format.png",
caption: "Shape formatting and geometry",
alt: "DeckCraft Shape Format tab with selection handles and alignment tools on an active shape",
},
{
file: "format-pane.webp",
source: "format-pane.png",
caption: "Format Shape pane and gradient stops",
alt: "DeckCraft Format Shape pane configuring gradient fill angles, stops and transparency",
},
{
file: "slide-sorter.webp",
source: "slide-sorter.png",
caption: "Slide Sorter view with transitions",
alt: "DeckCraft Slide Sorter showing all slides in the deck with assigned transition badges",
},
{
file: "dark-mode.webp",
source: "dark-mode.png",
caption: "Dark mode with chart slide",
alt: "DeckCraft dark mode editing a presentation slide featuring a native chart",
},
],
},
{
slug: "cadcraft",
prefix: "CAD",
category: "Computer-aided design & drafting",
status: "In development",
headline: ["Computer-aided design and drafting, ", "reimagined", " in pure Rust."],
pitch: "Fast, open-source computer-aided design and drafting in pure Rust.",
lede: "The command line, object snaps, layers, dimensions, hatches, blocks and drawings you already know. Fast, native, and built for both people and AI agents.",
schemaCategory: "DesignApplication",
platforms: ["macOS", "Windows", "Linux", "Web"],
rustVersion: "1.90",
features: [
{
title: "The drafting workflow",
body: "Type commands, click points, direct distance entry, object snaps, polar tracking, ortho, grips, and right-click-to-repeat.",
},
{
title: "Open drawing formats",
body: "Reads and writes DXF (ASCII and binary, R12–2018), opens DWG (R13–2018), and exports to PDF, SVG, and PNG.",
},
{
title: "Paper space & viewports",
body: "Layout sheets with floating viewports, per-viewport layer overrides, page setups, and scale-exact plotting.",
},
{
title: "Associative annotations",
body: "Linear, aligned, angular and radial dimensions that follow geometry, multileaders, tables, and custom drafting fonts.",
},
{
title: "Hatching & block libraries",
body: "Pick-point boundary hatching with islands, pattern fills, block definitions with attributes, and nested blocks.",
},
{
title: "Parametric constraints",
body: "Geometric and dimensional constraints with expression parameters that automatically re-solve as you edit.",
},
],
shots: [
{
file: "hero.webp",
source: "ui-apartment.png",
caption: "Apartment floor plan with hatching and dimensions",
alt: "CADCraft displaying an architectural floor plan with pick-point wall hatching, room schedules, dimensions and the command line",
},
{
file: "layout.webp",
source: "ui-layout.png",
caption: "Paper space layout with scaled viewport",
alt: "CADCraft paper space layout showing a title block sheet with an active scaled model viewport",
},
{
file: "bracket.webp",
source: "ui-bracket.png",
caption: "Mechanical part drawing with section hatch",
alt: "CADCraft drafting a mechanical mounting bracket with section lines, dimensions and title block",
},
],
},
{
slug: "gridcraft",
prefix: "Grid",
category: "Spreadsheets & data analysis",
status: "In development",
headline: ["Fast, native spreadsheets, ", "rebuilt", " in pure Rust."],
pitch: "Fast, open-source spreadsheets and data analysis, rebuilt in pure Rust.",
lede: "Ribbon tabs, formula bar, 500+ calculation functions, dynamic arrays, PivotTables and charts in a native spreadsheet app that reads and writes .xlsx files.",
schemaCategory: "BusinessApplication",
platforms: ["macOS", "Windows", "Linux", "Web"],
rustVersion: "1.90",
features: [
{
title: "The spreadsheet workflow",
body: "Formula bar, Name Box, sheet tabs, fill handle, colored cell references, conditional formatting, and familiar shortcuts.",
},
{
title: "Native XLSX compatibility",
body: "Styles, themes, formulas, dynamic arrays, tables, validation, comments, sparklines and PivotTables round-trip cleanly.",
},
{
title: "500+ calculation functions",
body: "Full dependency-graph calculation engine with dynamic arrays, spilling, LET, LAMBDA, MAP, REDUCE, and table references.",
},
{
title: "Charts & PivotTables",
body: "Seventeen chart types with customizable formatting, plus PivotTables with filters, field lists, layouts, and date grouping.",
},
{
title: "High-performance engine",
body: "Copy-on-write workbooks with instant undo snapshots, incremental recalculation, and a virtualised grid.",
},
{
title: "Agent-native automation",
body: "Every ribbon button, menu item, and formula can be driven by AI agents over an MCP server, CLI, or JSON control channel.",
},
],
shots: [
{
file: "hero.webp",
source: "hero-sales.png",
caption: "Quarterly sales dashboard with charts and sparklines",
alt: "GridCraft sales dashboard featuring a styled table with conditional formatting, sparklines, and column and pie charts",
},
{
file: "budget.webp",
source: "budget.png",
caption: "Household budget with conditional formatting",
alt: "GridCraft budget sheet showing accounting currency formats, color scales, and comparison bar charts",
},
{
file: "grades-formulas.webp",
source: "grades-formulas.png",
caption: "Formulas and function library",
alt: "GridCraft formula bar and Formulas ribbon tab calculating averages and letter grades",
},
{
file: "pivot.webp",
source: "pivot.png",
caption: "PivotTable and field list",
alt: "GridCraft PivotTable report summarizing data with the PivotTable Fields pane open on the right",
},
{
file: "format-chart.webp",
source: "format-chart.png",
caption: "Chart Design and Format Chart Area pane",
alt: "GridCraft configuring a column chart with the Format Chart Area pane and highlighted source range",
},
],
},
];
const COUNT_WORDS = ["Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten"];
const COUNT_WORDS = [
"Zero",
"One",
"Two",
"Three",
"Four",
"Five",
"Six",
"Seven",
"Eight",
"Nine",
"Ten",
"Eleven",
"Twelve",
"Thirteen",
"Fourteen",
"Fifteen",
"Sixteen",
];
/** "Seven" — the family size as a capitalized word, for headlines. */
export const CRAFTING_APPS_COUNT_WORD =