diff --git a/website/content/blog/2024-12-30-graphite-progress-report-q4-2024.md b/website/content/blog/2024-12-30-graphite-progress-report-q4-2024.md
new file mode 100644
index 0000000000..56a4b66fc6
--- /dev/null
+++ b/website/content/blog/2024-12-30-graphite-progress-report-q4-2024.md
@@ -0,0 +1,146 @@
++++
+title = "Graphite progress report (Q4 2024)"
+date = 2024-12-30
+[extra]
+banner = "..."
+banner_png = "..."
+author = "Keavon Chambers & Hypercube"
+summary = "Graphite's Q4 2024 update includes a multitude of bug fixes and quality of life improvements."
+reddit = "..."
+twitter = "..."
++++
+
+[Graphite](/), a new open source 2D procedural graphics editor, has spent October-December on a multitude of smaller quality-of-life features and bug fixes, making Graphite a usable alternative to vector graphics software such as Inkscape for the web.
+
+All Q4 2024 commits may be [viewed in this list](https://github.com/GraphiteEditor/Graphite/commits/master/?since=2024-10-01&until=2024-12-31) and all noteworthy changes are detailed below.
+
+
+
+This is the forth in our series of quarterly progress reports (congratulations on a full year @Keavon). If you missed the [last one](../graphite-progress-report-q3-2024), be sure to check it out as well. If you'd like to help speed up future progress, please consider [getting involved](/volunteer) with code, QA/bug testing, or art/marketing projects. [Donations](/donate) are also valued, as are [stars of GitHub](https://github.com/GraphiteEditor/Graphite). Follow along and partake in our [Discord community](https://discord.graphite.rs), too.
+
+The new *todo!()* artwork shown here ...
+
+
+
+
+## Additions
+
+
+- Add line height and character spacing to the Text node ([#2016](https://github.com/GraphiteEditor/Graphite/pull/2016))
+- Add support for pinning nodes in the Properties panel ([commit e6d8c47](https://github.com/GraphiteEditor/Graphite/commit/e6d8c4743d2aff15985c929df2cc7381a61908a0))
+- New demo artwork: "Changing Seasons" ([commit fa6b5f2](https://github.com/GraphiteEditor/Graphite/commit/fa6b5f298adf395362e1aaa2c07be89fa89eaee2))
+- New node: Offset Path ([#2030](https://github.com/GraphiteEditor/Graphite/pull/2030))
+- Make Copy to Points and (Circular) Repeat and nodes output group data, and add flattening nodes ([#2011](https://github.com/GraphiteEditor/Graphite/pull/2011))
+- Allow the Fill and Stroke nodes to work on groups ([#2046](https://github.com/GraphiteEditor/Graphite/pull/2046))
+- Add switch node and fix log to console node ([#2064](https://github.com/GraphiteEditor/Graphite/pull/2064))
+- New node: Bevel ([#2067](https://github.com/GraphiteEditor/Graphite/pull/2067))
+- Add a node insertion button and layer renaming from the Properties panel ([#2072](https://github.com/GraphiteEditor/Graphite/pull/2072))
+- In the Path tool, make Space shift the anchor while dragging handles ([#2065](https://github.com/GraphiteEditor/Graphite/pull/2065))
+- Add Path tool support for the Tab key swapping to dragging the opposite handle ([#2058](https://github.com/GraphiteEditor/Graphite/pull/2058))
+- Allow the Pen tool to connect layers by their endpoints, merging into a single layer ([#2076](https://github.com/GraphiteEditor/Graphite/pull/2076))
+- New nodes: "Clamp", "To U32", and "To U64" ([#2087](https://github.com/GraphiteEditor/Graphite/pull/2087))
+- New node: Jitter Points ([commit 7d86bf4](https://github.com/GraphiteEditor/Graphite/commit/7d86bf4abf7edfe6a5d021075e050614bee07c13))
+- Improve the node graph with revamped top bar and disabling tools when graph is open ([#2093](https://github.com/GraphiteEditor/Graphite/pull/2093))
+- Add merging nodes into a subgraph with Ctrl+M and basic subgraph signature customization ([#2097](https://github.com/GraphiteEditor/Graphite/pull/2097))
+- New node: Dot Product ([#2126](https://github.com/GraphiteEditor/Graphite/pull/2126))
+- New node: Math ([#2121](https://github.com/GraphiteEditor/Graphite/pull/2121))
+- Add Freehand tool drawing new subpaths on an existing layer with Shift held ([commit ed119ad](https://github.com/GraphiteEditor/Graphite/commit/ed119ad3d799030dbc488ccfc8ca9ad057eeff2c))
+- Automatically place layers into the artboard they're drawn inside of ([#2110](https://github.com/GraphiteEditor/Graphite/pull/2110))
+- Add more actions to the Layer menu bar entries ([commit feba874](https://github.com/GraphiteEditor/Graphite/commit/feba87449bb490e47df6f267576bec5ab4238dc3))
+- Add selection removal to the Select tool's box select (Ctrl+Shift modifier) ([#2162](https://github.com/GraphiteEditor/Graphite/pull/2162))
+
+
+## Fixes
+- Make Upload Texture node resolution-aware ([#2018](https://github.com/GraphiteEditor/Graphite/pull/2018))
+- Always close subpaths before applying boolean ops ([#2014](https://github.com/GraphiteEditor/Graphite/pull/2014))
+- Fix double clicking anchor to convert between smooth and sharp ([#2023](https://github.com/GraphiteEditor/Graphite/pull/2023))
+- Fix faulty contravariance checking ([#2025](https://github.com/GraphiteEditor/Graphite/pull/2025))
+- Fix the Scatter Points node ([commit 7a56af0](https://github.com/GraphiteEditor/Graphite/commit/7a56af01efc82460e780c78b008a52487972a7eb))
+- Update Wasm dependencies to fix WebGPU spec change crash in Firefox with Vello ([#2027](https://github.com/GraphiteEditor/Graphite/pull/2027))
+- Factor in artboard clipping to the click target x-ray function ([#2028](https://github.com/GraphiteEditor/Graphite/pull/2028))
+- Fix Ctrl+H layer hiding and Ctrl+L layer locking only working with the graph open ([#2029](https://github.com/GraphiteEditor/Graphite/pull/2029))
+- Improve text overlay styling and fix artboard label positioning bug ([#2032](https://github.com/GraphiteEditor/Graphite/pull/2032))
+- Fix crash from empty document with no artboards introduced in #2028 ([#2036](https://github.com/GraphiteEditor/Graphite/pull/2036))
+- Fix brush tool broken by #2011 ([#2045](https://github.com/GraphiteEditor/Graphite/pull/2045))
+- Allow multiple top output wires to come from layers ([#2049](https://github.com/GraphiteEditor/Graphite/pull/2049))
+- Fix various crashes and bugs ([#2075](https://github.com/GraphiteEditor/Graphite/pull/2075))
+- Fix gradient render transforms with Vello ([#2059](https://github.com/GraphiteEditor/Graphite/pull/2059))
+- Fix alignment snapping not preserving aspect ratio when Shift is held ([#2062](https://github.com/GraphiteEditor/Graphite/pull/2062))
+- Fix Text tool clearing text when hitting Escape by changing it to commit the edit instead ([#2052](https://github.com/GraphiteEditor/Graphite/pull/2052))
+- Allow the Path tool to edit an upstream path even if there's a type conversion midway ([#2055](https://github.com/GraphiteEditor/Graphite/pull/2055))
+- Fix layer name text input ([#2081](https://github.com/GraphiteEditor/Graphite/pull/2081))
+- Fix NumberInput widget not being reactive to changes to the unit ([#2080](https://github.com/GraphiteEditor/Graphite/pull/2080))
+- Improve Sample Points, Scatter Points, and Splines from Points to include segments and work with subpaths ([#2085](https://github.com/GraphiteEditor/Graphite/pull/2085))
+- Avoid sometimes breaking the selected layer upon switching away from the Select tool ([commit 8d3da83](https://github.com/GraphiteEditor/Graphite/commit/8d3da83606c23366d2688602afbc0917e7224e68))
+- Hide the left border notch in layers when a wire isn't entering from the layer's left ([commit 12ca060](https://github.com/GraphiteEditor/Graphite/commit/12ca06035cd7463ed895671ff7eebe53fde655c6))
+- Fix point nudging to work in document space ([#2095](https://github.com/GraphiteEditor/Graphite/pull/2095))
+- Fix Bevel node crash with zero-length segments ([#2096](https://github.com/GraphiteEditor/Graphite/pull/2096))
+- Fix the spline node algorithm to be continuous across start/end points ([#2092](https://github.com/GraphiteEditor/Graphite/pull/2092))
+- Improve nudging when tilted and add Artboard tool nudge resizing; disable menu bar entries when no layer is selected ([#2098](https://github.com/GraphiteEditor/Graphite/pull/2098))
+- Add Brush tool warning; move font list loading to document creation time ([commit de366f9](https://github.com/GraphiteEditor/Graphite/commit/de366f951424fcdf4463a419db3fa659910fabfd))
+- Make the Pen tool only append new paths when Shift is held ([#2102](https://github.com/GraphiteEditor/Graphite/pull/2102))
+- Make Pen tool always snap to endpoint anchors, even when snapping is off ([#2107](https://github.com/GraphiteEditor/Graphite/pull/2107))
+- Fix crash when upgrading a document with a Modulo node from 3 commits ago ([commit 4c4d559](https://github.com/GraphiteEditor/Graphite/commit/4c4d559d97b4d131d2777c0aab19590531ae47a9))
+- Clean up editor preferences dialog ([commit 99cf8f0](https://github.com/GraphiteEditor/Graphite/commit/99cf8f0c4f91a051b59fc2c9e5cc6c7417bdd74b))
+- Refactor collection of snap targets ([#2114](https://github.com/GraphiteEditor/Graphite/pull/2114))
+- Remove Double-Click Behavior for Switching to Path Tool on Non-Path Layers ([#2116](https://github.com/GraphiteEditor/Graphite/pull/2116))
+- Disabling colinear state when both the handles are selected and moved ([#2120](https://github.com/GraphiteEditor/Graphite/pull/2120))
+- Fix bitmap bounding box ([#2122](https://github.com/GraphiteEditor/Graphite/pull/2122))
+- Fixes shortcut key not showed in File->Close ([#2135](https://github.com/GraphiteEditor/Graphite/pull/2135))
+- Fix SVG `viewBox` capitalization in renderer ([#2131](https://github.com/GraphiteEditor/Graphite/pull/2131))
+- Tidy up the UI with clearer Layers panel selection marks and removal of most "coming soon" UI elements ([commit 1264ea8](https://github.com/GraphiteEditor/Graphite/commit/1264ea8246cbb06e0602a93be983762ab17adf30))
+- Improve issues with selection history ([#2138](https://github.com/GraphiteEditor/Graphite/pull/2138))
+- Fix transform cage rotation abort causing broken state upon next transformation ([#2149](https://github.com/GraphiteEditor/Graphite/pull/2149))
+- Make Path tool deselect all points on single-click, and select all on double-click, of shape's fill ([#2148](https://github.com/GraphiteEditor/Graphite/pull/2148))
+- Fix Select tool's box selection not being able to extend a selection with shift ([#2157](https://github.com/GraphiteEditor/Graphite/pull/2157))
+- Fix several bugged vector-related nodes ([commit b81f483](https://github.com/GraphiteEditor/Graphite/commit/b81f48385afc8c9c27820ffe8d5953529f89b7bd))
+- Improve quick measurement overlays across all possible arrangement scenarios ([#2147](https://github.com/GraphiteEditor/Graphite/pull/2147))
+- Improve quick measurement overlays with better number alignment and decimal rounding ([#2155](https://github.com/GraphiteEditor/Graphite/pull/2155))
+- Improve Text tool click targets on text layers to use the text box ([#2145](https://github.com/GraphiteEditor/Graphite/pull/2145))
+
+## Internal
+- Simplify the Bezier-rs interactive web demo code ([#2020](https://github.com/GraphiteEditor/Graphite/pull/2020))
+- Fix/suppress new Clippy warnings introduced in Rust 1.82 ([commit a395fbf](https://github.com/GraphiteEditor/Graphite/commit/a395fbf0637c23b8b05a7c451ff7b8421587b655))
+- Raw-rs: Refactor to run multiple steps in a single loop ([#1972](https://github.com/GraphiteEditor/Graphite/pull/1972))
+- Raw-rs: Fix naming convention of matrices ([#2071](https://github.com/GraphiteEditor/Graphite/pull/2071))
+- Raw-rs: Remove from workspace ([#2066](https://github.com/GraphiteEditor/Graphite/pull/2066))
+- Clean up old usages of `NodeId(generate_uuid())` by replacing it with `NodeId::new()` ([#2009](https://github.com/GraphiteEditor/Graphite/pull/2009))
+- Fix Bezier-rs web demos failing to run wasm-opt in CI ([commit 4df7803](https://github.com/GraphiteEditor/Graphite/commit/4df780391c0cbb87b12812d0249ed9b62e2740e4))
+- Raw-rs: Remove fortuples dependency ([#2082](https://github.com/GraphiteEditor/Graphite/pull/2082))
+- Rename Raw-rs to Rawkit ([#2088](https://github.com/GraphiteEditor/Graphite/pull/2088))
+- Parse description from node doc comments ([#2089](https://github.com/GraphiteEditor/Graphite/pull/2089))
+- Upgrade and document the math operation nodes ([commit d649052](https://github.com/GraphiteEditor/Graphite/commit/d649052255c10c15754c3a3707f2edf996d2468d))
+- Bezier-rs: Make rectangle constructor produce linear segments ([#2109](https://github.com/GraphiteEditor/Graphite/pull/2109))
+- Add math-parser library ([#2033](https://github.com/GraphiteEditor/Graphite/pull/2033))
+- Fix clippy lints ([#2119](https://github.com/GraphiteEditor/Graphite/pull/2119))
+- Simplify the implementation of the message buffering ([#2123](https://github.com/GraphiteEditor/Graphite/pull/2123))
+- Update some dependencies ([#2134](https://github.com/GraphiteEditor/Graphite/pull/2134))
+- Parse doc comments on node parameters ([#2163](https://github.com/GraphiteEditor/Graphite/pull/2163))
+
+## Website
+- Blog post: Graphite progress report (Q3 2024) ([#2013](https://github.com/GraphiteEditor/Graphite/pull/2013))
+- Update the screenshots on the website home page carousel ([commit f892687](https://github.com/GraphiteEditor/Graphite/commit/f89268757614bda5f949144f84ccc79bd33ddec2))
+- Update the website roadmap and other details ([commit d7a271f](https://github.com/GraphiteEditor/Graphite/commit/d7a271f67595863835e80e58636fead9b1fe0a1d))
+
+
+## Announcements
+
+
+### Community art contest
+
+There were no submissions to the Q4 art contest. Post your creations in the `#🎨art-showcase` channel in [our Discord](https://discord.graphite.rs) before the end of March to be featured in the Q1 progress report.