diff --git a/markdown/dev/reference/config/dependencies/en.md b/markdown/dev/reference/api/config/dependencies/en.md
similarity index 100%
rename from markdown/dev/reference/config/dependencies/en.md
rename to markdown/dev/reference/api/config/dependencies/en.md
diff --git a/markdown/dev/reference/config/en.md b/markdown/dev/reference/api/config/en.md
similarity index 100%
rename from markdown/dev/reference/config/en.md
rename to markdown/dev/reference/api/config/en.md
diff --git a/markdown/dev/reference/config/hide/en.md b/markdown/dev/reference/api/config/hide/en.md
similarity index 100%
rename from markdown/dev/reference/config/hide/en.md
rename to markdown/dev/reference/api/config/hide/en.md
diff --git a/markdown/dev/reference/config/inject/en.md b/markdown/dev/reference/api/config/inject/en.md
similarity index 100%
rename from markdown/dev/reference/config/inject/en.md
rename to markdown/dev/reference/api/config/inject/en.md
diff --git a/markdown/dev/reference/config/measurements/en.md b/markdown/dev/reference/api/config/measurements/en.md
similarity index 100%
rename from markdown/dev/reference/config/measurements/en.md
rename to markdown/dev/reference/api/config/measurements/en.md
diff --git a/markdown/dev/reference/config/name/en.md b/markdown/dev/reference/api/config/name/en.md
similarity index 100%
rename from markdown/dev/reference/config/name/en.md
rename to markdown/dev/reference/api/config/name/en.md
diff --git a/markdown/dev/reference/config/optionalmeasurements/en.md b/markdown/dev/reference/api/config/optionalmeasurements/en.md
similarity index 100%
rename from markdown/dev/reference/config/optionalmeasurements/en.md
rename to markdown/dev/reference/api/config/optionalmeasurements/en.md
diff --git a/markdown/dev/reference/config/options/boolean/en.md b/markdown/dev/reference/api/config/options/boolean/en.md
similarity index 100%
rename from markdown/dev/reference/config/options/boolean/en.md
rename to markdown/dev/reference/api/config/options/boolean/en.md
diff --git a/markdown/dev/reference/config/options/co b/markdown/dev/reference/api/config/options/co
similarity index 100%
rename from markdown/dev/reference/config/options/co
rename to markdown/dev/reference/api/config/options/co
diff --git a/markdown/dev/reference/config/options/constant/en.md b/markdown/dev/reference/api/config/options/constant/en.md
similarity index 100%
rename from markdown/dev/reference/config/options/constant/en.md
rename to markdown/dev/reference/api/config/options/constant/en.md
diff --git a/markdown/dev/reference/config/options/counter/en.md b/markdown/dev/reference/api/config/options/counter/en.md
similarity index 100%
rename from markdown/dev/reference/config/options/counter/en.md
rename to markdown/dev/reference/api/config/options/counter/en.md
diff --git a/markdown/dev/reference/config/options/degrees/en.md b/markdown/dev/reference/api/config/options/degrees/en.md
similarity index 100%
rename from markdown/dev/reference/config/options/degrees/en.md
rename to markdown/dev/reference/api/config/options/degrees/en.md
diff --git a/markdown/dev/reference/config/options/en.md b/markdown/dev/reference/api/config/options/en.md
similarity index 100%
rename from markdown/dev/reference/config/options/en.md
rename to markdown/dev/reference/api/config/options/en.md
diff --git a/markdown/dev/reference/config/options/list/en.md b/markdown/dev/reference/api/config/options/list/en.md
similarity index 100%
rename from markdown/dev/reference/config/options/list/en.md
rename to markdown/dev/reference/api/config/options/list/en.md
diff --git a/markdown/dev/reference/config/options/millimeter/en.md b/markdown/dev/reference/api/config/options/millimeter/en.md
similarity index 100%
rename from markdown/dev/reference/config/options/millimeter/en.md
rename to markdown/dev/reference/api/config/options/millimeter/en.md
diff --git a/markdown/dev/reference/config/options/percentage/en.md b/markdown/dev/reference/api/config/options/percentage/en.md
similarity index 100%
rename from markdown/dev/reference/config/options/percentage/en.md
rename to markdown/dev/reference/api/config/options/percentage/en.md
diff --git a/markdown/dev/reference/config/parts/en.md b/markdown/dev/reference/api/config/parts/en.md
similarity index 100%
rename from markdown/dev/reference/config/parts/en.md
rename to markdown/dev/reference/api/config/parts/en.md
diff --git a/markdown/dev/reference/config/ui/code/en.md b/markdown/dev/reference/api/config/ui/code/en.md
similarity index 100%
rename from markdown/dev/reference/config/ui/code/en.md
rename to markdown/dev/reference/api/config/ui/code/en.md
diff --git a/markdown/dev/reference/config/ui/department/en.md b/markdown/dev/reference/api/config/ui/department/en.md
similarity index 100%
rename from markdown/dev/reference/config/ui/department/en.md
rename to markdown/dev/reference/api/config/ui/department/en.md
diff --git a/markdown/dev/reference/config/ui/design/en.md b/markdown/dev/reference/api/config/ui/design/en.md
similarity index 100%
rename from markdown/dev/reference/config/ui/design/en.md
rename to markdown/dev/reference/api/config/ui/design/en.md
diff --git a/markdown/dev/reference/config/ui/difficulty/en.md b/markdown/dev/reference/api/config/ui/difficulty/en.md
similarity index 100%
rename from markdown/dev/reference/config/ui/difficulty/en.md
rename to markdown/dev/reference/api/config/ui/difficulty/en.md
diff --git a/markdown/dev/reference/config/ui/en.md b/markdown/dev/reference/api/config/ui/en.md
similarity index 100%
rename from markdown/dev/reference/config/ui/en.md
rename to markdown/dev/reference/api/config/ui/en.md
diff --git a/markdown/dev/reference/config/ui/optiongroups/advanced-option-group/en.md b/markdown/dev/reference/api/config/ui/optiongroups/advanced-option-group/en.md
similarity index 100%
rename from markdown/dev/reference/config/ui/optiongroups/advanced-option-group/en.md
rename to markdown/dev/reference/api/config/ui/optiongroups/advanced-option-group/en.md
diff --git a/markdown/dev/reference/config/ui/optiongroups/en.md b/markdown/dev/reference/api/config/ui/optiongroups/en.md
similarity index 100%
rename from markdown/dev/reference/config/ui/optiongroups/en.md
rename to markdown/dev/reference/api/config/ui/optiongroups/en.md
diff --git a/markdown/dev/reference/config/ui/optiongroups/nested-optiongroups/en.md b/markdown/dev/reference/api/config/ui/optiongroups/nested-optiongroups/en.md
similarity index 100%
rename from markdown/dev/reference/config/ui/optiongroups/nested-optiongroups/en.md
rename to markdown/dev/reference/api/config/ui/optiongroups/nested-optiongroups/en.md
diff --git a/markdown/dev/reference/config/ui/tags/en.md b/markdown/dev/reference/api/config/ui/tags/en.md
similarity index 100%
rename from markdown/dev/reference/config/ui/tags/en.md
rename to markdown/dev/reference/api/config/ui/tags/en.md
diff --git a/markdown/dev/reference/config/ui/type/en.md b/markdown/dev/reference/api/config/ui/type/en.md
similarity index 100%
rename from markdown/dev/reference/config/ui/type/en.md
rename to markdown/dev/reference/api/config/ui/type/en.md
diff --git a/markdown/dev/reference/config/version/en.md b/markdown/dev/reference/api/config/version/en.md
similarity index 100%
rename from markdown/dev/reference/config/version/en.md
rename to markdown/dev/reference/api/config/version/en.md
diff --git a/markdown/dev/reference/api/en.md b/markdown/dev/reference/api/en.md
index e260f1b41b3..49190c5d676 100644
--- a/markdown/dev/reference/api/en.md
+++ b/markdown/dev/reference/api/en.md
@@ -1,10 +1,5 @@
---
-title: Core API
-for: developers
-icons:
- - javascript
- - terms
-about: FreeSewing's core API reference documents all available methods and objects
+title: "@freesewing/core API"
---
This is the documentation for FreeSewing's core library, published as `@freesewing/core` on NPM.
diff --git a/markdown/dev/reference/hooks/en.md b/markdown/dev/reference/api/hooks/en.md
similarity index 100%
rename from markdown/dev/reference/hooks/en.md
rename to markdown/dev/reference/api/hooks/en.md
diff --git a/markdown/dev/reference/hooks/inserttext/en.md b/markdown/dev/reference/api/hooks/inserttext/en.md
similarity index 100%
rename from markdown/dev/reference/hooks/inserttext/en.md
rename to markdown/dev/reference/api/hooks/inserttext/en.md
diff --git a/markdown/dev/reference/hooks/postdraft/en.md b/markdown/dev/reference/api/hooks/postdraft/en.md
similarity index 100%
rename from markdown/dev/reference/hooks/postdraft/en.md
rename to markdown/dev/reference/api/hooks/postdraft/en.md
diff --git a/markdown/dev/reference/hooks/postrender/en.md b/markdown/dev/reference/api/hooks/postrender/en.md
similarity index 100%
rename from markdown/dev/reference/hooks/postrender/en.md
rename to markdown/dev/reference/api/hooks/postrender/en.md
diff --git a/markdown/dev/reference/hooks/postsample/en.md b/markdown/dev/reference/api/hooks/postsample/en.md
similarity index 100%
rename from markdown/dev/reference/hooks/postsample/en.md
rename to markdown/dev/reference/api/hooks/postsample/en.md
diff --git a/markdown/dev/reference/hooks/predraft/en.md b/markdown/dev/reference/api/hooks/predraft/en.md
similarity index 100%
rename from markdown/dev/reference/hooks/predraft/en.md
rename to markdown/dev/reference/api/hooks/predraft/en.md
diff --git a/markdown/dev/reference/hooks/prerender/en.md b/markdown/dev/reference/api/hooks/prerender/en.md
similarity index 100%
rename from markdown/dev/reference/hooks/prerender/en.md
rename to markdown/dev/reference/api/hooks/prerender/en.md
diff --git a/markdown/dev/reference/hooks/presample/en.md b/markdown/dev/reference/api/hooks/presample/en.md
similarity index 100%
rename from markdown/dev/reference/hooks/presample/en.md
rename to markdown/dev/reference/api/hooks/presample/en.md
diff --git a/markdown/dev/reference/macros/bartack/en.md b/markdown/dev/reference/api/macros/bartack/en.md
similarity index 100%
rename from markdown/dev/reference/macros/bartack/en.md
rename to markdown/dev/reference/api/macros/bartack/en.md
diff --git a/markdown/dev/reference/macros/bartackalong/en.md b/markdown/dev/reference/api/macros/bartackalong/en.md
similarity index 100%
rename from markdown/dev/reference/macros/bartackalong/en.md
rename to markdown/dev/reference/api/macros/bartackalong/en.md
diff --git a/markdown/dev/reference/macros/bartackfractionalong/en.md b/markdown/dev/reference/api/macros/bartackfractionalong/en.md
similarity index 100%
rename from markdown/dev/reference/macros/bartackfractionalong/en.md
rename to markdown/dev/reference/api/macros/bartackfractionalong/en.md
diff --git a/markdown/dev/reference/macros/cutonfold/en.md b/markdown/dev/reference/api/macros/cutonfold/en.md
similarity index 82%
rename from markdown/dev/reference/macros/cutonfold/en.md
rename to markdown/dev/reference/api/macros/cutonfold/en.md
index d55b4fd1343..828c00ee167 100644
--- a/markdown/dev/reference/macros/cutonfold/en.md
+++ b/markdown/dev/reference/api/macros/cutonfold/en.md
@@ -23,5 +23,13 @@ macro('cutonfold', {
| `offset` | 50 | Number | The distance in mm to offset from the line from start to end |
| `grainline` | `false` | Boolean | Whether this cutonfold indicator is also the grainline |
+
+
+###### It's safe to use a corner of your pattern part for this
+
+Since this is typically used on corners, the generated cut-on-fold indicator
+will not go all the way to the `to` and `from` points.
+
+
diff --git a/markdown/dev/reference/macros/en.md b/markdown/dev/reference/api/macros/en.md
similarity index 100%
rename from markdown/dev/reference/macros/en.md
rename to markdown/dev/reference/api/macros/en.md
diff --git a/markdown/dev/reference/macros/flip/en.md b/markdown/dev/reference/api/macros/flip/en.md
similarity index 100%
rename from markdown/dev/reference/macros/flip/en.md
rename to markdown/dev/reference/api/macros/flip/en.md
diff --git a/markdown/dev/reference/macros/grainline/en.md b/markdown/dev/reference/api/macros/grainline/en.md
similarity index 100%
rename from markdown/dev/reference/macros/grainline/en.md
rename to markdown/dev/reference/api/macros/grainline/en.md
diff --git a/markdown/dev/reference/macros/hd/en.md b/markdown/dev/reference/api/macros/hd/en.md
similarity index 100%
rename from markdown/dev/reference/macros/hd/en.md
rename to markdown/dev/reference/api/macros/hd/en.md
diff --git a/markdown/dev/reference/macros/ld/en.md b/markdown/dev/reference/api/macros/ld/en.md
similarity index 100%
rename from markdown/dev/reference/macros/ld/en.md
rename to markdown/dev/reference/api/macros/ld/en.md
diff --git a/markdown/dev/reference/macros/miniscale/en.md b/markdown/dev/reference/api/macros/miniscale/en.md
similarity index 100%
rename from markdown/dev/reference/macros/miniscale/en.md
rename to markdown/dev/reference/api/macros/miniscale/en.md
diff --git a/markdown/dev/reference/macros/mirror/en.md b/markdown/dev/reference/api/macros/mirror/en.md
similarity index 100%
rename from markdown/dev/reference/macros/mirror/en.md
rename to markdown/dev/reference/api/macros/mirror/en.md
diff --git a/markdown/dev/reference/macros/pd/en.md b/markdown/dev/reference/api/macros/pd/en.md
similarity index 100%
rename from markdown/dev/reference/macros/pd/en.md
rename to markdown/dev/reference/api/macros/pd/en.md
diff --git a/markdown/dev/reference/macros/rmad/en.md b/markdown/dev/reference/api/macros/rmad/en.md
similarity index 100%
rename from markdown/dev/reference/macros/rmad/en.md
rename to markdown/dev/reference/api/macros/rmad/en.md
diff --git a/markdown/dev/reference/macros/rmd/en.md b/markdown/dev/reference/api/macros/rmd/en.md
similarity index 100%
rename from markdown/dev/reference/macros/rmd/en.md
rename to markdown/dev/reference/api/macros/rmd/en.md
diff --git a/markdown/dev/reference/macros/round/en.md b/markdown/dev/reference/api/macros/round/en.md
similarity index 100%
rename from markdown/dev/reference/macros/round/en.md
rename to markdown/dev/reference/api/macros/round/en.md
diff --git a/markdown/dev/reference/macros/scalebox/en.md b/markdown/dev/reference/api/macros/scalebox/en.md
similarity index 100%
rename from markdown/dev/reference/macros/scalebox/en.md
rename to markdown/dev/reference/api/macros/scalebox/en.md
diff --git a/markdown/dev/reference/macros/sprinkle/en.md b/markdown/dev/reference/api/macros/sprinkle/en.md
similarity index 100%
rename from markdown/dev/reference/macros/sprinkle/en.md
rename to markdown/dev/reference/api/macros/sprinkle/en.md
diff --git a/markdown/dev/reference/macros/title/en.md b/markdown/dev/reference/api/macros/title/en.md
similarity index 100%
rename from markdown/dev/reference/macros/title/en.md
rename to markdown/dev/reference/api/macros/title/en.md
diff --git a/markdown/dev/reference/macros/vd/en.md b/markdown/dev/reference/api/macros/vd/en.md
similarity index 100%
rename from markdown/dev/reference/macros/vd/en.md
rename to markdown/dev/reference/api/macros/vd/en.md
diff --git a/markdown/dev/reference/settings/complete/en.md b/markdown/dev/reference/api/settings/complete/en.md
similarity index 100%
rename from markdown/dev/reference/settings/complete/en.md
rename to markdown/dev/reference/api/settings/complete/en.md
diff --git a/markdown/dev/reference/settings/embed/en.md b/markdown/dev/reference/api/settings/embed/en.md
similarity index 100%
rename from markdown/dev/reference/settings/embed/en.md
rename to markdown/dev/reference/api/settings/embed/en.md
diff --git a/markdown/dev/reference/settings/en.md b/markdown/dev/reference/api/settings/en.md
similarity index 100%
rename from markdown/dev/reference/settings/en.md
rename to markdown/dev/reference/api/settings/en.md
diff --git a/markdown/dev/reference/settings/idprefix/en.md b/markdown/dev/reference/api/settings/idprefix/en.md
similarity index 100%
rename from markdown/dev/reference/settings/idprefix/en.md
rename to markdown/dev/reference/api/settings/idprefix/en.md
diff --git a/markdown/dev/reference/settings/layout/en.md b/markdown/dev/reference/api/settings/layout/en.md
similarity index 100%
rename from markdown/dev/reference/settings/layout/en.md
rename to markdown/dev/reference/api/settings/layout/en.md
diff --git a/markdown/dev/reference/settings/locale/en.md b/markdown/dev/reference/api/settings/locale/en.md
similarity index 100%
rename from markdown/dev/reference/settings/locale/en.md
rename to markdown/dev/reference/api/settings/locale/en.md
diff --git a/markdown/dev/reference/settings/margin/en.md b/markdown/dev/reference/api/settings/margin/en.md
similarity index 100%
rename from markdown/dev/reference/settings/margin/en.md
rename to markdown/dev/reference/api/settings/margin/en.md
diff --git a/markdown/dev/reference/settings/measurements/en.md b/markdown/dev/reference/api/settings/measurements/en.md
similarity index 100%
rename from markdown/dev/reference/settings/measurements/en.md
rename to markdown/dev/reference/api/settings/measurements/en.md
diff --git a/markdown/dev/reference/settings/only/en.md b/markdown/dev/reference/api/settings/only/en.md
similarity index 100%
rename from markdown/dev/reference/settings/only/en.md
rename to markdown/dev/reference/api/settings/only/en.md
diff --git a/markdown/dev/reference/settings/options/en.md b/markdown/dev/reference/api/settings/options/en.md
similarity index 100%
rename from markdown/dev/reference/settings/options/en.md
rename to markdown/dev/reference/api/settings/options/en.md
diff --git a/markdown/dev/reference/settings/paperless/en.md b/markdown/dev/reference/api/settings/paperless/en.md
similarity index 100%
rename from markdown/dev/reference/settings/paperless/en.md
rename to markdown/dev/reference/api/settings/paperless/en.md
diff --git a/markdown/dev/reference/settings/sa/en.md b/markdown/dev/reference/api/settings/sa/en.md
similarity index 100%
rename from markdown/dev/reference/settings/sa/en.md
rename to markdown/dev/reference/api/settings/sa/en.md
diff --git a/markdown/dev/reference/settings/units/en.md b/markdown/dev/reference/api/settings/units/en.md
similarity index 100%
rename from markdown/dev/reference/settings/units/en.md
rename to markdown/dev/reference/api/settings/units/en.md
diff --git a/markdown/dev/reference/snippets/bnotch/en.md b/markdown/dev/reference/api/snippets/bnotch/en.md
similarity index 100%
rename from markdown/dev/reference/snippets/bnotch/en.md
rename to markdown/dev/reference/api/snippets/bnotch/en.md
diff --git a/markdown/dev/reference/snippets/button/en.md b/markdown/dev/reference/api/snippets/button/en.md
similarity index 100%
rename from markdown/dev/reference/snippets/button/en.md
rename to markdown/dev/reference/api/snippets/button/en.md
diff --git a/markdown/dev/reference/snippets/buttonhole-end/en.md b/markdown/dev/reference/api/snippets/buttonhole-end/en.md
similarity index 100%
rename from markdown/dev/reference/snippets/buttonhole-end/en.md
rename to markdown/dev/reference/api/snippets/buttonhole-end/en.md
diff --git a/markdown/dev/reference/snippets/buttonhole-start/en.md b/markdown/dev/reference/api/snippets/buttonhole-start/en.md
similarity index 100%
rename from markdown/dev/reference/snippets/buttonhole-start/en.md
rename to markdown/dev/reference/api/snippets/buttonhole-start/en.md
diff --git a/markdown/dev/reference/snippets/buttonhole/en.md b/markdown/dev/reference/api/snippets/buttonhole/en.md
similarity index 100%
rename from markdown/dev/reference/snippets/buttonhole/en.md
rename to markdown/dev/reference/api/snippets/buttonhole/en.md
diff --git a/markdown/dev/reference/snippets/en.md b/markdown/dev/reference/api/snippets/en.md
similarity index 100%
rename from markdown/dev/reference/snippets/en.md
rename to markdown/dev/reference/api/snippets/en.md
diff --git a/markdown/dev/reference/snippets/logo/en.md b/markdown/dev/reference/api/snippets/logo/en.md
similarity index 100%
rename from markdown/dev/reference/snippets/logo/en.md
rename to markdown/dev/reference/api/snippets/logo/en.md
diff --git a/markdown/dev/reference/snippets/notch/en.md b/markdown/dev/reference/api/snippets/notch/en.md
similarity index 100%
rename from markdown/dev/reference/snippets/notch/en.md
rename to markdown/dev/reference/api/snippets/notch/en.md
diff --git a/markdown/dev/reference/snippets/snap-socket/en.md b/markdown/dev/reference/api/snippets/snap-socket/en.md
similarity index 100%
rename from markdown/dev/reference/snippets/snap-socket/en.md
rename to markdown/dev/reference/api/snippets/snap-socket/en.md
diff --git a/markdown/dev/reference/snippets/snap-stud/en.md b/markdown/dev/reference/api/snippets/snap-stud/en.md
similarity index 100%
rename from markdown/dev/reference/snippets/snap-stud/en.md
rename to markdown/dev/reference/api/snippets/snap-stud/en.md
diff --git a/markdown/dev/reference/backend/account/en.md b/markdown/dev/reference/backend/account/en.md
deleted file mode 100644
index 55797e235d9..00000000000
--- a/markdown/dev/reference/backend/account/en.md
+++ /dev/null
@@ -1,110 +0,0 @@
----
-title: Account
----
-
-## Load account
-```
-GET /account
-```
-On success: The account data
-On failure:
-```
-400
-```
-
-## Update account
-```
-PUT /account
-{
- 'bio': 'The new bio',
- 'avatar': 'data:image/png;base64,iVBORw0KGg...'
- 'password': 'new password',
- 'username': 'new username',
- 'email': 'new.email@domain.com',
- 'social': {
- 'github': 'githubUsername',
- 'twitter': 'twitterUsername',
- 'isntagram': 'instagramUsername'
- },
- 'settings': {
- 'language': 'fr',
- 'units': 'imperial',
- },
- 'consent': {
- 'profile': true,
- 'model': false,
- 'openData': false
- },
-```
-On success: The (updated) account data
-On failure:
-```
-400
-```
- - This will only update what you pass it
- - This will only handle one top-level attribute per call
- - A change of email won't take effect immediately but instead trigger an email for confirmation. The email will be sent to the new email address, with the current email address in CC.
-
-## Remove account
-```
-DELETE /account
-```
-On success:
-```
-204
-```
-On failure:
-```
-400
-```
-
-Removes the account and all user's data. Will also trigger a goodbye email.
-
-## Confirm email change
-```
-POST /account/change/email
-{
- 'id': '98e132041ad3f369443f1d3d'
-}
-```
-On success: The account data
-On failure:
-```
-400
-```
-
-Changing your email address requires confirmation, and this endpoint is for that.
-
-## Export account
-```
-GET /account/export
-```
-On success:
-```
-200
-{
- 'export': 'https://static.freesewing.org/tmp/msypflkyyw/export.zip'
-}
-```
-On failure:
-```
-400
-```
-
-Will export the user data and publish it for download.
-
-## Restrict account
-```
-GET /account/restrict
-```
-On success:
-```
-200
-```
-On failure:
-```
-400
-```
-
-Will lock the user account, thereby restricting processing of their data.
-
diff --git a/markdown/dev/reference/backend/en.md b/markdown/dev/reference/backend/en.md
deleted file mode 100644
index a1ce0740d3a..00000000000
--- a/markdown/dev/reference/backend/en.md
+++ /dev/null
@@ -1,52 +0,0 @@
----
-title: Backend API
-for: developers
-about: Documentation for our backend REST API
----
-
-This documentation is outdated
-
-
-
-See also: [The backend documentation](/reference/repos/backend/)
-
-
-
-## API Cheat sheet
-With authentication:
-
-|🔐| Method | Endpoint | Description |
-|--- |--------|----------|-------------|
-|🔐|`POST`|`/models`| [Creates model](/reference/backend/models/#create-model) |
-|🔐|`GET`|`/models/:handle`| [Read model](/reference/backend/models/#read-model) |
-|🔐|`PUT`|`/models/:handle`| [Update model](/reference/backend/models/#update-model) |
-|🔐|`DELETE`|`/models/:handle`| [Remove model](/reference/backend/models/#remove-model) |
-|🔐|`POST`|`/recipes`| [Create recipe](/reference/backend/recipes/#create-recipe) |
-|🔐|`GET`|`/recipes/:handle`| [Read recipe](/reference/backend/recipes/#read-recipe) |
-|🔐|`PUT`|`/recipes/:handle`| [Updates recipe](/reference/backend/recipes/#update-recipe) |
-|🔐|`DELETE`|`/recipes/:handle`| [Remove recipe](/reference/backend/recipes/#remove-recipe) |
-|🔐|`GET`|`/account`| [Load account](/reference/backend/account/#load-account) |
-|🔐|`PUT`|`/account`| [Update account](/reference/backend/account/#update-account) |
-|🔐|`DELETE`|`/account`| [Remove account](/reference/backend/account/#remove-account) |
-|🔐|`POST`|`/account/change/email`| [Confirm email change](/reference/backend/account/#confirm-email-change) |
-|🔐|`GET`|`/account/export`| [Export account](/reference/backend/account/#export-account) |
-|🔐|`GET`|`/account/restrict`| [Restric account](/reference/backend/account/#restrict-account) |
-|🔐|`GET`|`/users/:username`| [Read user profile](/reference/backend/users/#read-user-profile)
-|🔐|`POST`|`/available/username`| [Is username available](/reference/backend/users/#is-username-available) |
-
-Without authentication:
-
-|🔓| Method | Endpoint | Description |
-|--- |--------|----------|-------------|
-|🔓|`POST`|`/signup`| [Request account](/reference/backend/signup/#request-account) |
-|🔓|`POST`|`/account`| [Create account](/reference/backend/signup/#create-account) |
-|🔓|`POST`|`/login`| [Log in](/reference/backend/login/#log-in) |
-|🔓|`POST`|`/reset/password`| [Recover password](/reference/backend/login/#recover-password) |
-|🔓|`POST`|`/confirm/login`| [Passwordless login](/reference/backend/login/#passwordless-login) |
-|🔓|`POST`|`/oauth/init`| [Oauth initialisation](/reference/backend/oauth/#oauth-initialisation) |
-|🔓|`GET`|`/oauth/callback/from/:provider`| [Oauth callback](/reference/backend/oauth/#oauth-callback) |
-|🔓|`POST`|`/oauth/login`| [Oauth login](/reference/backend/oauth/#oauth-login) |
-|🔓|`GET`|`/patrons`| [Patron list](/reference/backend/users/#patron-list) |
-
-
-
diff --git a/markdown/dev/reference/backend/login/en.md b/markdown/dev/reference/backend/login/en.md
deleted file mode 100644
index 0e1d342fca2..00000000000
--- a/markdown/dev/reference/backend/login/en.md
+++ /dev/null
@@ -1,55 +0,0 @@
----
-title: Log in
----
-
-## Log in
-```
-POST /login
-{
- 'username': 'user-csfwg',
- 'password': `test`
-}
-```
-On success: The account data
-On failure:
-```
-400
-```
- - Returns the same as the create account endpoint
- - Both username or email address can be uses as `username`
-
-## Reset password
-```
-POST /reset/password
-{
- 'username': 'test@freesewing.org'
-}
-```
-On success:
-```
-200
-```
-On failure:
-```
-400
-```
-
- - Will send an email to the user with a link for a passwordless login.
-
-## Passwordless login
-```
-POST /confirm/login
-{
- 'id': '5d5132041ad3f369443f1d7b'
-}
-```
-On success: The account data
-On failure:
-```
-400
-```
- - Returns the same as the create account endpoint
- - ID is the one sent out in the confirmation email
-
-This will log the user in.
-
diff --git a/markdown/dev/reference/backend/models/en.md b/markdown/dev/reference/backend/models/en.md
deleted file mode 100644
index 13c353348da..00000000000
--- a/markdown/dev/reference/backend/models/en.md
+++ /dev/null
@@ -1,83 +0,0 @@
----
-title: Models
----
-
-## Create model
-
-```
-POST /models
-{
- 'name': 'The model name',
- 'breasts': false,
- 'units': 'imperial'
-}
-```
-On success:
-```
-200
-{
- 'model': {
- 'breasts': false,
- 'units': 'imperial',
- 'handle': 'dnkve',
- 'user': 'ohium',
- 'name': The model name',
- 'createdAt': '2019-08-12T12:06:41.086Z',
- 'updatedAt': '2019-08-12T12:06:41.086Z',
- 'pictureUris': {
- 'l': 'https://static.she.freesewing.org/users/o/ohium/models/dnkve/dnkve.svg',
- 'm': 'https://static.she.freesewing.org/users/o/ohium/models/dnkve/dnkve.svg',
- 's': 'https://static.she.freesewing.org/users/o/ohium/models/dnkve/dnkve.svg',
- 'xs': 'https://static.she.freesewing.org/users/o/ohium/models/dnkve/dnkve.svg'
- }
- }
-}
-```
-On failure:
-```
-400
-```
-
-Creates a model and returns its data.
-
-## Read model
-```
-GET /models/:handle
-```
-On success: The model data
-On failure:
-```
-400
-```
-
-Loads a model's data
-
-## Update model
-
-```
-PUT /models/:handle
-{
- 'measurements': {
- 'ankleCircumference': 234
- }
-}
-```
-
-Updates the model and returns the (updated) model data.
-
-## Remove model
-
-```
-DELETE /models/:handle
-```
-On success:
-```
-200
-```
-On failure:
-```
-400
-```
-
-Removes the model
-
diff --git a/markdown/dev/reference/backend/oauth/en.md b/markdown/dev/reference/backend/oauth/en.md
deleted file mode 100644
index f178cee3617..00000000000
--- a/markdown/dev/reference/backend/oauth/en.md
+++ /dev/null
@@ -1,54 +0,0 @@
----
-title: Oauth
----
-
-## Oauth initialisation
-```
-POST /oauth/init
-{
- 'provider': 'github',
- 'language': 'fr'
-}
-```
-On success:
-```
-200
-{
- 'state': '5d5132041ad3f369443f1d7b'
-}
-```
-On failure:
-```
-400
-```
- - This triggers an Oauth flow
- - `provider` should be one of `google` or `github`
- - `language` should be one of the [configured language codes](https://github.com/freesewing/backend/blob/develop/src/config/index.js#L32)
- - The frontend will use the state value to initialize an Oauth session. We'll check the state value when we receive the Oauth callback at the backend
-
-## Oauth callback
-```
-GET /oauth/callback/from/:provider
-```
-On success: Redirects to the frontend
-
-This is part of the Oauth flow. It fetches the user info from the Oauth provider. If it can't match it with a user, it will create a user account.
-In other words, this will handle both log in and sign up.
-
-The frontend redirect will contain a confirmation ID in the URL that we'll `POST` back in the next Oauth flow step.
-
-## Oauth login
-```
-POST /oauth/login
-{
- 'confirmation': '98e132041ad3f369443f1d3d'
-}
-```
-On success: The account data
-On failure:
-```
-400
-```
-
-This is the last step of the Oauth process. It logs a user in.
-
diff --git a/markdown/dev/reference/backend/recipes/en.md b/markdown/dev/reference/backend/recipes/en.md
deleted file mode 100644
index ef6829168aa..00000000000
--- a/markdown/dev/reference/backend/recipes/en.md
+++ /dev/null
@@ -1,85 +0,0 @@
----
-title: Recipes
----
-
-## Create Recipe
-
-```
-POST /recipes
-{
- 'name': 'The recipe name',
- 'notes': 'Some notes',
- 'recipe': {
- 'settings': {
- 'sa': 10,
- 'complete': true,
- 'paperless': false,
- 'units': 'metric',
- 'measurements': {
- 'bicepsCircumference': 335,
- 'centerBackNeckToWaist': 520,
- 'chestCircumference': 1080,
- '"naturalWaistToHip': 145,
- 'neckCircumference': 420,
- 'shoulderSlope': 55,
- 'shoulderToShoulder': 465,
- 'hipsCircumference': 990
- }
- },
- 'pattern': 'aaron',
- 'model': 'dvqye'
- }
-}
-```
-On success:
-```
-200
-{
- 'handle': 'abxda'
-}
-```
-On failure:
-```
-400
-```
-
-Creates a recipe and returns its data.
-
-## Read recipe
-```
-GET /recipes/:handle
-```
-On success: The recipe data
-On failure:
-```
-400
-```
-
-Loads a recipe's data
-
-## Update recipe
-
-```
-PUT /recipes/:handle
-{
- 'notes': "5 stars, would make again"
-}
-```
-
-Updates the recipe and returns the (updated) recipe data.
-
-## Remove recipe
-
-```
-DELETE /recipes/:handle
-```
-On success:
-```
-200
-```
-On failure:
-```
-400
-```
-
-Removes the recipe
diff --git a/markdown/dev/reference/backend/signup/en.md b/markdown/dev/reference/backend/signup/en.md
deleted file mode 100644
index 4cf9cd50152..00000000000
--- a/markdown/dev/reference/backend/signup/en.md
+++ /dev/null
@@ -1,97 +0,0 @@
----
-title: Sign up
----
-
-## Request account
-```
-POST /signup
-{
- email: 'test@freesewing.org',
- password: 'test',
- language: 'en'
-}
-```
-On success:
-```
-200
-```
-On error:
-```
-400
-```
-
- - This is the first half in the user sign up flow.
- - `language` should be one of the [configured language codes](https://github.com/freesewing/backend/blob/develop/src/config/index.js#L32)
- - This will create (but not activate) a user account
- - This will send out an email to the user to confirm their email address
-
-## Create account
-```
-POST /account
-{
- id: '5d5132041ad3f369443f1d7b'
- consent: {
- profile: true,
- model: true,
- openData: true
- }
-}
-```
-On success: The account data:
-```
-200
-{
- 'account': {
- 'settings': {
- 'language': 'en',
- 'units': 'metric'
- },
- 'consent': {
- 'profile': true,
- 'model': true,
- 'openData': true,
- },
- 'time': {
- 'login': '2019-08-12T09:41:15.823Z'
- },
- 'role': 'user',
- 'patron': 0,
- 'bio': '',
- 'picture': 'csfwg.svg',
- 'status': 'active',
- 'handle': 'csfwg',
- 'username': 'user-csfwg',
- 'email': 'test@freesewing.org',
- 'pictureUris': {
- 'l': 'https://static.freesewing.org/users/c/csfwg/csfwg.svg',
- 'm': 'https://static.freesewing.org/users/c/csfwg/csfwg.svg',
- 's': 'https://static.freesewing.org/users/c/csfwg/csfwg.svg',
- 'xs': 'https://static.freesewing.org/users/c/csfwg/csfwg.svg'
- }
- },
- 'models': {},
- 'recipes': {},
- 'token': 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1ZDUxMzQzYjFhZDNmMzY5NDQzZjFkOTYiLCJoYW5kbGUiOiJjc2Z3ZyIsImF1ZCI6ImZyZWVzZXdpbmcub3JnIiwiaXNzIjoiZnJlZXNld2luZy5vcmciLCJpYXQiOjE1NjU2MDI4NzV9.-u4qgiH5sEcwhSBvQ9AOxjqsJO3-Phm9t7VbPaPS7vs'
-}
-```
-On failure:
-```
-400
-```
-
-This is the second half of the sign up flow. The email sent to the user in the first half of the sign up flow contains a link to the (frontend) confirmation page. This will get the confirmation ID from the URL and `POST` it to
-the backend, along with the user's choices regarding consent for processing their personal data.
-
-The `consent` object has the following properties:
- - `bool profile` : Consent for the processing of profile data
- - `bool model` : Consent for the processing of model data
- - `bool openData` : Whether or not the user allows publishing of measurements as open data
-
-For more details on user consent, please consult [FreeSewing's privacy notice](https://en.freesewing.org/docs/about/privacy).
-
-
-
-Our frontend won't allow users to proceed without profile consent as
-storing your data requires that consent. The backend enforces this too
-
-
diff --git a/markdown/dev/reference/backend/users/en.md b/markdown/dev/reference/backend/users/en.md
deleted file mode 100644
index d3dc313b7e3..00000000000
--- a/markdown/dev/reference/backend/users/en.md
+++ /dev/null
@@ -1,90 +0,0 @@
----
-title: Users
----
-
-## Read user profile
-```
-GET /users/:username
-```
-On success:
-```
-200
-{
- 'settings': {
- 'language': 'en',
- 'units': 'metric'
- },
- 'patron': 0,
- 'bio': '',
- 'handle': 'rracx',
- 'username': 'admin',
- 'createdAt': '2019-08-12T07:40:32.435Z',
- 'updatedAt': '2019-08-12T09:23:48.930Z',
- 'pictureUris': {
- 'l': 'https://static.she.freesewing.org/users/r/rracx/rracx.svg',
- 'm': 'https://static.she.freesewing.org/users/r/rracx/rracx.svg',
- 's': 'https://static.she.freesewing.org/users/r/rracx/rracx.svg',
- 'xs': 'https://static.she.freesewing.org/users/r/rracx/rracx.svg'
- }
-}
-```
-
-Load the profile data of a user. It expects one parameter in the URL of the `GET` request:
-
-| Variable | Description |
-|------------|-------------|
-| `username` | The username of the user to load the profile data for |
-
-## Is username availbable
-
-```
-POST /available/username
-{
- username: 'username to check'
-}
-```
-Username available:
-```
-200
-```
-Username not available:
-```
-400
-```
-
-## Patron list
-
-```
-GET /patrons
-```
-On success:
-```
-200
-{
- '2': [
- ],
- '4': [],
- '8': [
- {
- 'handle': 'joost',
- 'username': 'joost',
- 'bio':"If something doesn't work around here, that's probably my fault",
- 'social': {
- 'twitter': 'j__st',
- 'instagram': 'joostdecock',
- 'github': 'joostdecock'
- },
- 'pictureUris': {
- 'l': 'https://static.freesewing.org/users/j/joost/joost.jpg',
- 'm': 'https://static.freesewing.org/users/j/joost/m-joost.jpg',
- 's': 'https://static.freesewing.org/users/j/joost/s-joost.jpg',
- 'xs': 'https://static.freesewing.org/users/j/joost/xs-joost.jpg'
- }
- }
- ]
-}
-```
-
-- Retrieves the list of [FreeSewing patrons](https://freesewing.org/patrons).
-- Returns an array per tier
-
diff --git a/markdown/dev/reference/designs/en.md b/markdown/dev/reference/designs/en.md
deleted file mode 100644
index a5e43ca60a9..00000000000
--- a/markdown/dev/reference/designs/en.md
+++ /dev/null
@@ -1,18 +0,0 @@
----
-title: Designs
-for: contributors
-about: Complete list of FreeSewing designs that we've put out
----
-
-We have a growing number of designs (sewing patterns).
-
-For each of these, we provide a stand-alone instance of our development environment.
-This allows you to quickly recreate issues, or kick the tires.
-
-The full list is below:
-
-
-
-Include list based on new iterator
-
-
diff --git a/markdown/dev/reference/en.md b/markdown/dev/reference/en.md
index 6ef04180111..ddffb071d6b 100644
--- a/markdown/dev/reference/en.md
+++ b/markdown/dev/reference/en.md
@@ -3,3 +3,5 @@ title: Reference
order: 1040
---
+
+
diff --git a/markdown/dev/reference/plugins/bartack/en.md b/markdown/dev/reference/plugins/bartack/en.md
index e845e431b0b..c057b16599e 100644
--- a/markdown/dev/reference/plugins/bartack/en.md
+++ b/markdown/dev/reference/plugins/bartack/en.md
@@ -1,27 +1,26 @@
---
-title: bartack
+title: "@freesewing/plugin-bartack"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-bartack)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-bartack)
+The **@freesewing/plugin-bartack** plugin provides
+[the bartack macro](/reference/api/macros/bartack).
+This macro allows you to add bartacks — a set of
+tight zig-zag stitches used to enforce a seam — to your design.
-The [@freesewing/plugin-bartack](/reference/packages/plugin-bartack) packages provides a plugin to help bartack points and/or paths around a given bartack line.
+## Example
+
+Example of the bartack macro provided by this plugin
## Installation
-```bash
+```sh
npm install @freesewing/plugin-bartack
```
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -32,8 +31,8 @@ const Pattern = new freesewing.Design(config, bartack);
```
Now you can use the
-[bartack](/reference/macros/bartack/),
-[bartackAlong](/reference/macros/bartackalong/), and
-[bartackFractionAlong](/reference/macros/bartackfractionalong/) macros in your parts.
+[bartack](/reference/api/macros/bartack/),
+[bartackAlong](/reference/api/macros/bartackalong/), and
+[bartackFractionAlong](/reference/api/macros/bartackfractionalong/) macros in your parts:
diff --git a/markdown/dev/reference/plugins/bundle/en.md b/markdown/dev/reference/plugins/bundle/en.md
index b24579d8acd..4853b073170 100644
--- a/markdown/dev/reference/plugins/bundle/en.md
+++ b/markdown/dev/reference/plugins/bundle/en.md
@@ -1,26 +1,17 @@
---
-title: bundle
+title: "@freesewing/plugin-bundle"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-bundle)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-bundle)
+The **@freesewing/plugin-bundle** plugin bundles the most common FreeSewing build-time plugins:
-
-The bundle plugin bundles the most common FreeSewing build-time plugins:
-
- 1. [plugin-cutonfold](/reference/plugins/cutonfold) : Add cut-on-fold indicators to your patterns
- 2. [plugin-dimension](/reference/plugins/dimension) : Add dimensions to your (paperless) patterns
- 3. [plugin-grainline](/reference/plugins/grainline) : Add grainline indicators to your patterns
- 4. [plugin-logo](/reference/plugins/logo) : Add a scalebox to your patterns
- 5. [plugin-scalebox](/reference/plugins/scalebox) : Add pretty titles to your pattern parts
- 6. [plugin-title](/reference/plugins/title) : Add pretty titles to your pattern parts
- 7. [plugin-round](/reference/plugins/round) : Rounds corners
- 8. [plugin-sprinkle](/reference/plugins/sprinkle) : Add multiple snippets to your pattern
+- [plugin-cutonfold](/reference/plugins/cutonfold) : Add cut-on-fold indicators to your patterns
+- [plugin-dimension](/reference/plugins/dimension) : Add dimensions to your (paperless) patterns
+- [plugin-grainline](/reference/plugins/grainline) : Add grainline indicators to your patterns
+- [plugin-logo](/reference/plugins/logo) : Add a scalebox to your patterns
+- [plugin-scalebox](/reference/plugins/scalebox) : Add pretty titles to your pattern parts
+- [plugin-title](/reference/plugins/title) : Add pretty titles to your pattern parts
+- [plugin-round](/reference/plugins/round) : Rounds corners
+- [plugin-sprinkle](/reference/plugins/sprinkle) : Add multiple snippets to your pattern
Almost all patterns use these plugins, so it made sense to bundle them.
@@ -32,8 +23,8 @@ npm install @freesewing/plugin-bundle
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
diff --git a/markdown/dev/reference/plugins/bust/en.md b/markdown/dev/reference/plugins/bust/en.md
index c17e2391303..03920ea76db 100644
--- a/markdown/dev/reference/plugins/bust/en.md
+++ b/markdown/dev/reference/plugins/bust/en.md
@@ -1,19 +1,15 @@
---
-title: bust
+title: "@freesewing/plugin-bust"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-bust)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-bust)
-
-The [@freesewing/plugin-bust](/reference/packages/plugin-bust) packages provides a plugin to help you adapt menswear patterns for breasts.
-
+The **@freesewing/plugin-bust** plugin helps you adapt menswear patterns for breasts.
If you are designing a womenswear pattern, you won't need this plugin. But if you're adapting
-a menswear pattern for breasts, this plugin can help you.
+a menswear pattern for breasts, or merely want to accomodate both people with and without
+breasts, this plugin can help you accomplish that.
+
+
+
+##### Understanding the use-case for this plugin
Almost all menswear patterns use the chest circumference to draft the garment.
@@ -27,10 +23,18 @@ This plugin helps you by:
- Storing the chest circumference in `measurements.bust`
- Changing `measurments.chestCircumference` to the value of `measurements.highBust`
+
+
+## Use when extending breastless patterns into a with-breasts version
+
+One way this plugin is used is to extend a menswear pattern into a womenswear pattern.
+In this case, the plugin will always be loaded since the pattern assumes breasts will be present.
+
This way you can extend a menswear pattern and have it drafted with the high bust measurement
as chest measurment, after which you can create room for the breasts.
-It's used by our [Carlita](/reference/packages/carlita) pattern, which extends the menswear [Carlton](/reference/packages/carlton) pattern.
+You can see this in practice in our [Carlita][1] pattern,
+which extends the menswear [Carlton][2] pattern.
@@ -38,6 +42,22 @@ To learn more about extending a pattern, see [Design inheritance](/howtos/code/i
+## Use when creating gender-neutral patterns
+
+To create a truly gender-neutral pattern — one that will adapt to breasts only if they are
+present — you can use this plugin, but you'll also need a few other things:
+
+- You'll need to mark the breast measurements as [optional measurements](/reference/api/config/optionalmeasurements)
+- You'll need to [conditionally load this plugin](/guides/plugins/conditionally-loading-build-time-plugins)
+
+You can see an example of this in [our Teagan design][3].
+
+
+
+**TODO**: Write a tutorial on gender-neutral desing
+
+
+
## Installation
```bash
@@ -46,8 +66,8 @@ npm install @freesewing/plugin-bust
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -58,3 +78,6 @@ const Pattern = new freesewing.Design(config, bust);
```
+[1]: https://github.com/freesewing/freesewing/blob/develop/packages/carlita/src/index.js#L12
+[2]: https://github.com/freesewing/freesewing/blob/develop/packages/carlton
+[3]: https://github.com/freesewing/freesewing/blob/develop/packages/teagan/src/index.js
diff --git a/markdown/dev/reference/plugins/buttons/en.md b/markdown/dev/reference/plugins/buttons/en.md
index b7b28be4333..f3f8df1e2c3 100644
--- a/markdown/dev/reference/plugins/buttons/en.md
+++ b/markdown/dev/reference/plugins/buttons/en.md
@@ -1,32 +1,19 @@
---
-title: buttons
+title: "@freesewing/plugin-buttons"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-buttons)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-buttons)
+The **@freesewing/plugin-buttons** plugin provides the following [snippets](/reference/api/snippets):
-The **buttons** plugin provides the following [snippets](/reference/snippets/):
+ - [button](/reference/api/snippets/button)
+ - [buttonhole](/reference/api/snippets/buttonhole)
+ - [buttonhole-start](/reference/api/snippets/buttonhole-start)
+ - [buttonhole-end](/reference/api/snippets/buttonhole-end)
+ - [snap-stud](/reference/api/snippets/snap-stud)
+ - [snap-socket](/reference/api/snippets/snap-socket)
- - `button`
- - `buttonhole`
- - `buttonhole-start`
- - `buttonhole-end`
- - `snap-stud`
- - `snap-socket`
-
-
-
-```js
-let { Point, snippets, Snippet } = part.shorthand();
-
-snippets.button = new Snippet('button', new Point(40, 10));
-snippets.buttonhole = new Snippet('buttonhole', new Point(80, 10));
-```
+
+An example of the button, buttonhole, buttonhole-start, buttonhole-end, snap-stud, and snap-socket snippets
+
@@ -42,8 +29,8 @@ npm install @freesewing/plugin-buttons
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -53,3 +40,12 @@ import config from "../config";
const Pattern = new freesewing.Design(config, buttons);
```
+Now you can use the
+[button](/reference/api/snippets/button),
+[buttonhole](/reference/api/snippets/buttonhole),
+[buttonhole-start](/reference/api/snippets/buttonhole-start),
+[buttonhole-end](/reference/api/snippets/buttonhole-end),
+[snap-stud](/reference/api/snippets/snap-stud), and
+[snap-socket](/reference/api/snippets/snap-socket)
+snippets in your designs.
+
diff --git a/markdown/dev/reference/plugins/cutonfold/en.md b/markdown/dev/reference/plugins/cutonfold/en.md
index c33f82c280d..48fc528f7a6 100644
--- a/markdown/dev/reference/plugins/cutonfold/en.md
+++ b/markdown/dev/reference/plugins/cutonfold/en.md
@@ -1,52 +1,20 @@
---
-title: cutonfold
+title: "@freesewing/plugin-cutonfold"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-cutonfold)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-cutonfold)
+The **@freesewing/plugin-cutonfold** plugin provides
+[the cutonfold macro](/reference/api/macros/cutonfold) which adds a cut-on-fold
+indicator to your design.
-The **cutonfold** plugin provides [the cutonfold macro](/reference/macros/cutonfold/):
+
-
+An example of the cutonfold macro
-```js
-let { Point, points, Path, paths, macro } = part.shorthand();
-
-points.topLeft = new Point(0, 0);
-points.topRight = new Point(150, 0);
-points.bottomRight = new Point(150, 50);
-points.bottomLeft = new Point(0, 50);
-
-paths.box = new Path()
- .move(points.topLeft)
- .line(points.topRight)
- .line(points.bottomRight)
- .line(points.bottomLeft)
- .close();
-
-macro("cutonfold", {
- from: points.bottomLeft,
- to: points.bottomRight,
- grainline: true
-});
-```
-
-
-###### It's safe to use a corner of your pattern part for this
-
-Since this is typically used on corners, the generated cut-on-fold indicator
-will not go all the way to the `to` and `from` points.
-
-
+
-The cutonfold plugin is part of our [plugin-bundle](/reference/plugins/bundle/)
+The cutonfold plugin is part of our [plugin-bundle](/reference/plugins/bundle)
@@ -58,8 +26,8 @@ npm install @freesewing/plugin-cutonfold
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -69,4 +37,4 @@ import config from "../config";
const Pattern = new freesewing.Design(config, cutonfold);
```
-Now you can use [the cutonfold macro](/reference/macros/cutonfold/) in your parts.
+Now you can use [the cutonfold macro](/reference/api/macros/cutonfold/) in your parts.
diff --git a/markdown/dev/reference/plugins/dimension/en.md b/markdown/dev/reference/plugins/dimension/en.md
index 7590608493b..cf168d6159a 100644
--- a/markdown/dev/reference/plugins/dimension/en.md
+++ b/markdown/dev/reference/plugins/dimension/en.md
@@ -1,73 +1,26 @@
---
-title: dimension
+title: "@freesewing/plugin-dimension"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-dimension)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-dimension)
+The **@freesewing/plugin-dimension** plugin provides a variety of macros
+to facilitate adding *dimensions* to your design. By *dimensions* we mean
+the indicators for distance that are added to patterns
+in [paperless mode](/reference/api/settings/paperless).
-The **dimension** plugin provides the following [macros](/plugins#macros):
+The following macors are provided by this plugin:
- - [hd](/reference/macros/hd/) : Adds a horizontal dimension
- - [vd](/reference/macros/vd/) : Adds a vertical dimension
- - [ld](/reference/macros/ld/) : Adds a linear dimension
- - [pd](/reference/macros/pd/) : Adds a dimension along a path
- - [rmd](/reference/macros/rmd/) : Removes a dimension
- - [rmad](/reference/macros/rmad/) : Removes all dimensions with a default prefix
+ - [hd](/reference/api/macros/hd) : Adds a horizontal dimension
+ - [vd](/reference/api/macros/vd) : Adds a vertical dimension
+ - [ld](/reference/api/macros/ld) : Adds a linear dimension
+ - [pd](/reference/api/macros/pd) : Adds a dimension along a path
+ - [rmd](/reference/api/macros/rmd) : Removes a dimension
+ - [rmad](/reference/api/macros/rmad) : Removes all dimensions with a default prefix
-
+
-```js
-let { Point, points, Path, paths, macro } = part.shorthand();
+An example of the different dimensinon macros
-points.A = new Point(0, 0);
-points.B = new Point(0, 100);
-points.C = new Point(50, 100);
-points.D = new Point(100, 50);
-points.DCp1 = new Point(100, 0);
-
-paths.box = new Path()
- .move(points.A)
- .line(points.B)
- .line(points.C)
- .line(points.D)
- .curve(points.DCp1, points.A, points.A)
- .close();
-
-macro("vd", {
- from: points.A,
- to: points.B,
- x: points.A.x - 15
-});
-
-macro("hd", {
- from: points.B,
- to: points.C,
- y: points.B.y + 15
-});
-
-macro("ld", {
- from: points.C,
- to: points.D,
- d: -15
-});
-
-macro("ld", {
- from: points.C,
- to: points.D,
- d: -30,
- text: "Custom text"
-});
-
-macro("pd", {
- path: new Path().move(points.A).curve(points.A, points.DCp1, points.D),
- d: -15
-});
-```
+
@@ -83,8 +36,8 @@ npm install @freesewing/plugin-dimension
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -94,9 +47,12 @@ import config from "../config";
const Pattern = new freesewing.Design(config, dimension);
```
-Now you can use the following macros in your parts:
+Now you can use the
+[hd](/reference/api/macros/hd/),
+[vd](/reference/api/macros/vd/),
+[ld](/reference/api/macros/ld/),
+[pd](/reference/api/macros/pd/),
+[rmd](/reference/api/macros/rmd/), and
+[rmad](/reference/api/macros/rmad/)
+macros in your parts.
- - [hd](/reference/macros/hd/)
- - [vd](/reference/macros/vd/)
- - [ld](/reference/macros/ld/)
- - [pd](/reference/macros/pd/)
diff --git a/markdown/dev/reference/plugins/en.md b/markdown/dev/reference/plugins/en.md
index bc928f26ac3..98f74e0ec5b 100644
--- a/markdown/dev/reference/plugins/en.md
+++ b/markdown/dev/reference/plugins/en.md
@@ -1,9 +1,13 @@
---
title: Plugins
-for: developers
-about: Complete list of all the plugins available for FreeSewing core
---
-The following FreeSewing plugins are available:
+FreeSewing uses a modular approach where functionality can be extended with
+plugins. Plugins can provide macros, or use any of the lifecycle hooks.
+Refer to [the plugin guide](/guides/plugins) for an in-depth look into plugins.
+
+We maintain the following plugins for @freesewing/core:
+
+
+
-
diff --git a/markdown/dev/reference/plugins/flip/en.md b/markdown/dev/reference/plugins/flip/en.md
index 4b91810b761..3a665511af6 100644
--- a/markdown/dev/reference/plugins/flip/en.md
+++ b/markdown/dev/reference/plugins/flip/en.md
@@ -1,22 +1,12 @@
---
-title: flip
+title: "@freesewing/plugin-flip"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-flip)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-flip)
-
-The **flip** plugin provides [the flip macro](/reference/macros/flip/) which flips (mirrors) an entire part vertically around the Y-axis.
-
-```js
-let { macro } = part.shorthand();
-
-macro("flip");
-```
+The **@freesewing/plugin-flip** plugin provides [the flip
+macro](/reference/apis/macros/flip/) which flips (mirrors)
+an entire part vertically around the Y-axis.
+It's typically used to create a right and left pattern part from
+the same basis.
## Installation
@@ -26,8 +16,8 @@ npm install @freesewing/plugin-flip
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -37,4 +27,4 @@ import config from "../config";
const Pattern = new freesewing.Design(config, flip);
```
-Now you can use [the flip macro](/reference/macros/flip) in your parts.
+Now you can use [the flip macro](/reference/api/macros/flip) in your parts.
diff --git a/markdown/dev/reference/plugins/grainline/en.md b/markdown/dev/reference/plugins/grainline/en.md
index f4fce4854af..58cba3336c5 100644
--- a/markdown/dev/reference/plugins/grainline/en.md
+++ b/markdown/dev/reference/plugins/grainline/en.md
@@ -1,30 +1,12 @@
---
-title: grainline
+title: "@freesewing/plugin-grainline"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-grainline)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-grainline)
+The **@freesewing/plugin-grainline** plugin provides [the grainline
+macro](/reference/macros/grainline/) which adds a *grainline* indicator
+to your design.
-The **grainline** plugin provides [the grainline macro](/reference/macros/grainline/):
-
-
-
-```js
-let { Point, points, macro } = part.shorthand();
-
-points.grainlineFrom = new Point(10, 10);
-points.grainlineTo = new Point(100, 10);
-
-macro("grainline", {
- from: points.grainlineFrom,
- to: points.grainlineTo
-});
-```
+An example of the grainline macro
@@ -40,8 +22,8 @@ npm install @freesewing/plugin-grainline
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -51,4 +33,4 @@ import config from "../config";
const Pattern = new freesewing.Design(config, grainline);
```
-Now you can use [the grainline macro](/reference/macros/grainline) in your parts.
+Now you can use [the grainline macro](/reference/api/macros/grainline) in your parts.
diff --git a/markdown/dev/reference/plugins/i18n/en.md b/markdown/dev/reference/plugins/i18n/en.md
index 4451bda462c..91e33950119 100644
--- a/markdown/dev/reference/plugins/i18n/en.md
+++ b/markdown/dev/reference/plugins/i18n/en.md
@@ -1,21 +1,11 @@
---
-title: i18n
+title: "@freesewing/plugin-i18n"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-i18n)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-i18n)
-
-The **i18n** plugin provides translation for your pattern:
-
-
-
-
-It uses the [`insertText`](/plugins#inserttext) hook to do so.
+The **@freesewing/plugin-i18n** plugin provides a mechanism to translate your designs.
+It does that by attaching to [the insertText lifecycle hook](/reference/api/hooks/inserttext) to
+intercept all operations that add text to a design and attempt to translate the text
+prior to insertion.
diff --git a/markdown/dev/reference/plugins/logo/en.md b/markdown/dev/reference/plugins/logo/en.md
index 1dd61ef2535..9c4921b8a68 100644
--- a/markdown/dev/reference/plugins/logo/en.md
+++ b/markdown/dev/reference/plugins/logo/en.md
@@ -1,24 +1,13 @@
---
-title: logo
+title: "@freesewing/plugin-logo"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-logo)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-logo)
+The **@freesewing/plugin-logo** plugin provides the FreeSewing logo
+as [the logo snippet](/reference/api/snippets/logo).
+It's a plugin you most likely want to replace with your own version
+if you want to generate patterns with your own branding.
-The **logo** plugin provides [the logo snippet](/reference/snippets/):
-
-
-
-```js
-let { Point, snippets, Snippet } = part.shorthand();
-
-snippets.logo = new Snippet("logo", new Point(50, 30));
-```
+An example of the logo snippet
@@ -34,8 +23,8 @@ npm install @freesewing/plugin-logo
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -45,3 +34,5 @@ import config from "../config";
const Pattern = new freesewing.Design(config, logo);
```
+You can now use the [logo](/reference/api/snippets/logo) snippet in your parts.
+
diff --git a/markdown/dev/reference/plugins/mirror/en.md b/markdown/dev/reference/plugins/mirror/en.md
index b87be9af0cb..4fdac240cf2 100644
--- a/markdown/dev/reference/plugins/mirror/en.md
+++ b/markdown/dev/reference/plugins/mirror/en.md
@@ -1,16 +1,12 @@
---
-title: mirror
+title: "@freesewing/plugin-mirror"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-mirror)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-mirror)
+The **@freesewing/plugin-mirror** plugin provides [the mirror
+macro](/reference/api/macros/mirror) which facilitates mirroring
+a number of points and/or paths around a given mirror line.
-The [@freesewing/plugin-mirror](/reference/packages/plugin-mirror) packages provides a plugin to help mirror points and/or paths around a given mirror line.
+Example of the mirror plugin
## Installation
@@ -20,8 +16,8 @@ npm install @freesewing/plugin-mirror
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -31,6 +27,6 @@ import config from "../config";
const Pattern = new freesewing.Design(config, mirror);
```
-Now you can use [the mirror macro](/reference/macros/mirror) in your parts.
+You can now use the [mirror](/reference/api/macros/mirror) macro in your parts.
diff --git a/markdown/dev/reference/plugins/round/en.md b/markdown/dev/reference/plugins/round/en.md
index e33afffac17..25a846cbd68 100644
--- a/markdown/dev/reference/plugins/round/en.md
+++ b/markdown/dev/reference/plugins/round/en.md
@@ -1,50 +1,21 @@
---
-title: round
+title: "@freesewing/plugin-round"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-round)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-round)
+The **@freesewing/plugin-round** plugin provides [the
+round macro](/reference/api/macros/round) which helps you round
+corners on your designs.
-The **round** plugin provides [the round macro](/reference/macros/round/):
+
-
+##### Straight corners only
-```js
-points.topLeft = new Point(0, 0);
-points.bottomLeft = new Point(0, 30);
-points.topRight = new Point(100, 0);
-points.bottomRight = new Point(100, 30);
+The round macro is intended for rounding 90° angles.
+It does not support rounding other angles/corners.
-paths.demo = new Path()
- .move(points.topLeft)
- .line(points.bottomLeft)
- .line(points.bottomRight)
- .line(points.topRight)
- .close()
- .attr("class", "note dashed");
+
-macro("round", {
- from: points.topLeft,
- to: points.bottomRight,
- via: points.bottomLeft,
- radius: 10,
- prefix: 'bl',
- render: true
-});
-macro("round", {
- from: points.bottomRight,
- to: points.topLeft,
- via: points.topRight,
- radius: 20,
- prefix: 'tr',
- render: true
-});
-```
+An example of the round macro
@@ -60,8 +31,8 @@ npm install @freesewing/plugin-round
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -73,9 +44,4 @@ const Pattern = new freesewing.Design(config, round);
Now you can use [the round macro](/reference/macros/round/): in your parts.
-
-
-The round macro is intended for rounding 90° angles
-
-
diff --git a/markdown/dev/reference/plugins/scalebox/en.md b/markdown/dev/reference/plugins/scalebox/en.md
index 0fef672921a..f72f8126bc5 100644
--- a/markdown/dev/reference/plugins/scalebox/en.md
+++ b/markdown/dev/reference/plugins/scalebox/en.md
@@ -1,34 +1,21 @@
---
-title: scalebox
+title: "@freesewing/plugin-scalebox"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-scalebox)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-scalebox)
+The **@freesewing/plugin-scalebox** plugin provides [the
+scalebox macro](/reference/api/macros/scalebox/) with facilitates
+adding a scalebox to your design, so users can verify that the pattern
+is printed at the correct scale.
-The **scalebox** plugin provides [the scalebox macro](/reference/macros/scalebox/):
-
-
-
-```js
-let { Point, points, macro } = part.shorthand();
-
-points.anchor = new Point(0, 0);
-
-macro("scalebox", {
- at: points.anchor
-});
-```
+An example of the scalebox
-###### Purpose of a scale box
+##### FreeSewing branding can be overruled at runtime
-A scalebox allows people to verify the pattern is printed at the correct scale
+This plugin by default includes FreeSewing branding, but you can
+override that when calling the scalebox macro in case you want to
+generate your own branded designs.
@@ -46,8 +33,8 @@ npm install @freesewing/plugin-scalebox
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -57,4 +44,4 @@ import config from "../config";
const Pattern = new freesewing.Design(config, scalebox);
```
-Now you can use [the scalebox macro](/reference/macros/scalebox/) the macro in your parts.
+Now you can use the [scalebox](/reference/api/macros/scalebox/) macro in your parts.
diff --git a/markdown/dev/reference/plugins/sprinkle/en.md b/markdown/dev/reference/plugins/sprinkle/en.md
index aef3d19222c..00115c062c5 100644
--- a/markdown/dev/reference/plugins/sprinkle/en.md
+++ b/markdown/dev/reference/plugins/sprinkle/en.md
@@ -1,37 +1,13 @@
---
-title: sprinkle
+title: "@freesewing/plugin-sprinkle"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-sprinkle)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-sprinkle)
+The **@freesewing/plugin-sprinkle** plugin provides [the
+sprinkle macro](/reference/api/macros/sprinkle/) which is a faster way
+to add several of the same snippets to your designs (think of it as
+*sprinkling* them onto your parts).
-The **sprinkle** plugin provides [the sprinkle macro](/reference/macros/sprinkle/):
-
-
-
-```js
-let { Point, points, macro } = part.shorthand();
-
-points.a = new Point(10, 10);
-points.b = new Point(20, 15);
-points.c = new Point(30, 10);
-points.d = new Point(40, 15);
-points.e = new Point(50, 10);
-points.f = new Point(60, 15);
-points.g = new Point(70, 10);
-points.h = new Point(80, 15);
-points.i = new Point(90, 10);
-
-macro("sprinkle", {
- snippet: "button",
- on: ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
-});
-```
+An example of the sprinkle macro
@@ -47,8 +23,8 @@ npm install @freesewing/plugin-sprinkle
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -58,4 +34,4 @@ import config from "../config";
const Pattern = new freesewing.Design(config, sprinkle);
```
-Now you can use [the sprinkle macro](/reference/macros/sprinkle/) in your parts.
+Now you can use the [sprinkle](/reference/api/macros/sprinkle) macro in your parts.
diff --git a/markdown/dev/reference/plugins/svgattr/en.md b/markdown/dev/reference/plugins/svgattr/en.md
index 778bb66676f..ead435dde4d 100644
--- a/markdown/dev/reference/plugins/svgattr/en.md
+++ b/markdown/dev/reference/plugins/svgattr/en.md
@@ -1,18 +1,10 @@
---
-title: svgattr
+title: "@freesewing/plugin-svgattr"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-svgattr)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-svgattr)
-
-The **svgattr** plugin takes an object of key-value pairs and adds them to the SVG tag on render.
-
-It uses the [`preRender`](/plugins#preRender) hook to do so.
+The **@freesewing/plugin-svgattr** plugin takes an object of key-value
+pairs and adds them ass attributes to your SVG document on render.
+It leverages [the preRender lifecycle hook](/reference/api/hooks/prerender) to do so.
## Installation
@@ -22,16 +14,16 @@ npm install @freesewing/plugin-svgattr
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import Aaron from "@freesewing/aaron";
-import i18n from "@freesewing/plugin-i18n";
+import svgAttr from "@freesewing/plugin-svgattr";
import translations from "@freesewing/i18n";
const myAaron = new Aaron()
- .use(i18nPlugin, { class: "freesewing draft" });
+ .use(svgAttr, { class: "freesewing pattern" });
```
You should pass a second argument which holds key-value pairs of the attributes you want to add to the SVG tag.
diff --git a/markdown/dev/reference/plugins/theme/en.md b/markdown/dev/reference/plugins/theme/en.md
index 6c9bd5f9f98..883cbc17530 100644
--- a/markdown/dev/reference/plugins/theme/en.md
+++ b/markdown/dev/reference/plugins/theme/en.md
@@ -1,25 +1,20 @@
---
-title: theme
+title: "@freesewing/plugin-theme"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-theme)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-theme)
+The **@freesewing-plugin-theme** plugin provides CSS styling for SVG output.
+It leverages [the preRender lifecycle hook](/reference/api/hooks/prerender) to
+accomplish this.
-The **theme** plugin provides CSS styling for SVG output:
-
-
-
-It uses the [`preRender`](/plugins#prerender) hook to do so.
-This plugin only applies to rendered SVG output. If you use our React component to display
-patterns, you should style our component or use our [css-theme](/reference/packages/css-theme) package.
+##### Only applies to SVG/PS/PDF output
+
+This plugin will inject CSS in the SVG document when rendering to SVG.
+
+If you use other ways to render your pattern (like our React component)
+you will need to apply your own styles.
@@ -31,14 +26,15 @@ npm install @freesewing/plugin-theme
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [run-time plugins](/guides/plugins/types-of-plugins#run-time-plugins), you
+load them by by passing them to the `use()` method of an instatiated pattern.
+
+That method is chainable, so if you have multiple plugins you can just chain them together.
```js
import Aaron from "@freesewing/aaron";
import theme from "@freesewing/plugin-theme";
-const myAaron = new Aaron()
- .use(theme);
+const myAaron = new Aaron().use(theme);
```
diff --git a/markdown/dev/reference/plugins/title/en.md b/markdown/dev/reference/plugins/title/en.md
index a2407278d89..64bf5624352 100644
--- a/markdown/dev/reference/plugins/title/en.md
+++ b/markdown/dev/reference/plugins/title/en.md
@@ -1,30 +1,12 @@
---
-title: title
+title: "@freesewing/plugin-title"
---
-[](/plugins)
-
-[](https://www.npmjs.com/package/@freesewing/plugin-title)
-
-[](https://deepscan.io/dashboard#view=project&tid=2114&pid=2993&bid=23256)
-
-[](https://github.com/freesewing/freesewing/issues?q=is%3Aissue+is%3Aopen+label%3Apkg%3Aplugin-title)
+The **@freesewing/plugin-title** plugin provides [the
+title macro](/reference/api/macros/title/) which facilitates adding part titles
+to your desings.
-The **title** plugin provides [the title macro](/reference/macros/title/):
-
-
-
-```js
-let { Point, points, macro } = part.shorthand();
-
-points.title = new Point(90, 45);
-
-macro("title", {
- at: points.title,
- nr: 4,
- title: "sleeve"
-});
-```
+An example of the title macro
@@ -40,8 +22,8 @@ npm install @freesewing/plugin-title
## Usage
-Like all [build-time plugins](/guides/plugins/#build-time-plugins), you load them
-by passing them to the [`freesewing.Design`](/reference/api#design) constructor:
+Like all [build-time plugins](/guides/plugins/types-of-plugins#build-time-plugins), you
+load them by passing them to the [freesewing.Design](/reference/api/design) super-constructor:
```js
import freesewing from "@freesewing/core";
@@ -51,5 +33,5 @@ import config from "../config";
const Pattern = new freesewing.Design(config, title);
```
-Now you can use [the title macro](/reference/macros/title/) in your parts.
+Now you can use the [title](/reference/api/macros/title/) macro in your parts.
diff --git a/markdown/dev/reference/repos/backend/en.md b/markdown/dev/reference/repos/backend/en.md
deleted file mode 100644
index 30e467e18aa..00000000000
--- a/markdown/dev/reference/repos/backend/en.md
+++ /dev/null
@@ -1,191 +0,0 @@
----
-title: backend
----
-
-
-
-
-
-See also: [The backend API reference](/reference/backend)
-
-
-
-
-
-Our backend is a REST API built with [Express](https://expressjs.com/),
-using [MongoDB](https://www.mongodb.com/) as our database.
-
-This backend handles the storage and retrieval of user data. Including:
-
- - User profiles
- - Models
- - Recipes
-
-This backend does not include any code related to our patterns.
-It is only required if you want to use your own instance
-of [freesewing.org](https://github.com/freesewing/backend).
-
-## Getting started
-
-To start this backend, you'll need:
-
- - A MongoDB database
- - Configure environment variables (see [configuration](#configuration) below)
-
-There's a few different ways you can get started:
-
-### Using our docker image and your own database
-
-If you just want the backend and provide your own mongo instance,
-you can run [our docker image](https://hub.docker.com/r/freesewing/backend) directly
-from the internet:
-
-```
-docker run --env-file .env --name fs_backend -d -p 3000:3000 freesewing/backend
-```
-
-Your backend will now be available at http://localhost:3000
-
-### Using docker-compose
-
-You can use [docker-compose](https://docs.docker.com/compose/) to spin up both the backend
-API and a MongoDB instance. Clone the repository, and run `docker-compose up`:
-
-```
-git clone git@github.com:freesewing/backend.git
-cd backend
-docker-compose up
-```
-
-Your backend will now be available at http://localhost:3000
-
-### Run from source
-
-To run the backend from source, you'll need to clone this repository
-and intall dependencies.
-
-```
-git clone git@github.com:freesewing/backend
-cd backend
-npm install
-npm install --global backpack-core
-```
-
-
-
-We are installing [backpack-core](https://www.npmjs.com/package/backpack-core) globally for ease-of-use
-
-
-
-While developing, you can run:
-
-```
-npm run develop
-```
-
-And backpack will compile the backend, and spin it up.
-It will also watch for changes and re-compile every time. Handy!
-
-If you want to run this in production, you should build the code:
-
-```
-npm run build
-```
-
-Then use something like [PM2](http://pm2.keymetrics.io/) to run it and keep it running.
-
-## Configuration
-
-This backend can be configured with environment variables.
-We provide an `example.env` file that you can edit and rename to `.env`.
-This way they will be picked up automatically.
-
-The available variables are listed below, as we as in our [example.env](https://github.com/freesewing/backend/blob/develop/example.env) file.
-
-
-| Variable | Description |
-| ------------------------- | ------------------------------------------------ |
-| `FS_BACKEND` | URL on which the backend is hosted |
-| `FS_STATIC` | URL on which the static content is hosted |
-| `FS_STORAGE` | Location on disk where to store files |
-| `FS_MONGO_URI` | URL for the Mongo database |
-| `FS_ENC_KEY` | Secret used for encryption of data at rest |
-| `FS_SMTP_HOST` | SMTP server through which to send outgoing emails |
-| `FS_SMTP_PORT` | Port to use to connect to the SMTP server |
-| `FS_SMTP_USER` | SMTP relay username |
-| `FS_SMTP_PASS` | SMTP relay password |
-| `FS_GITHUB_CLIENT_ID` | Github client ID for Oauth signup/login via GitHub |
-| `FS_GITHUB_CLIENT_SECRET` | Github client ID for Oauth signup/login via GitHub |
-| `FS_GOOGLE_CLIENT_ID` | Google client ID for Oauth signup/login via Google |
-| `FS_GOOGLE_CLIENT_SECRET` | Google client ID for Oauth signup/login via Google |
-
-## Authentication
-
-This API uses [JWT](https://jwt.io/) for authentication. Authenticated calls to this API should include a `Authorization` header as such:
-
-```
-Authorization: Bearer
-```
-
-The `token` is returned from the `/login`, `/oauth/login`, and `/confirm/login` endpoints.
-
-## CLI
-
-Our backend encrypts data at rest using the [mongoose-encryption](https://www.npmjs.com/package/mongoose-encryption) plugin.
-That's a good thing, but can complicate life a bit when you'd like to go and in make some changes to the data without going
-through the application code.
-If you use some sort of administration tools for MongoDB and write data to the DB, that data won't be encrypted.
-And thus reading that data back will fail (since we expect encrypted data).
-
-Because of this, this backend comes with a couple of command-line tools to do basic database tasks:
-
-| Command | Description |
-|---------|-------------|
-|`npm run clear:users`| Remove all users |
-|`npm run clear:models`| Remove all models |
-|`npm run clear:recipes`| Remove all recipes |
-|`npm run clear:confirmations`| Remove all confirmations |
-|`npm run clear:all`| Empty the entire database |
-|`npm run clear:reboot`| Empty database, then load sample data |
-
-> **Tip**: You can use `npm run cli` to see the available options
-
-## Tests
-
-There's two ways to run tests:
-
- - `npm run test` will run tests that don't depend on emails
-
-
-
- - `npm run testall` will runn all tests, including the ones that depend on email
-
-
-
-To run the email tests, spin up a mailhog container with Docker:
-
-```
-sudo docker run -p 8025:8025 -p 1025:1025 mailhog/mailhog
-```
-
-Then, configure your backend as such:
-
-`FS_SMTP_HOST` : `localhost` (this makes sure emails go to mailhog)
-`FS_SMTP_PORT` : `1025` (the mailhog port)
-
-This allows complete end-to-end testing of signup flow and other things the depend on email sent to the user.
-
-
-## Links
-
-- 💻 Maker site: [freesewing.org](https://freesewing.org)
-- 👩💻 Developer site: [freesewing.dev](https://freesewing.dev)
-- 💬 Chat/Support: [discord.freesewing.org](https://discord.freesewing.org)
-- 🐦 Twitter: [@freesewing_org](https://twitter.com/freesewing_org)
-- 📷 Instagram: [@freesewing_org](https://instagram.com/freesewing_org)
-
-## License
-
-Copyright (c) 2019 Joost De Cock - Available under the MIT license.
-
-See the LICENSE file for more details.
diff --git a/markdown/dev/reference/repos/en.md b/markdown/dev/reference/repos/en.md
deleted file mode 100644
index b4bc47b3b9b..00000000000
--- a/markdown/dev/reference/repos/en.md
+++ /dev/null
@@ -1,9 +0,0 @@
----
-title: Repositories
-for: contributors
-about: Complete list of all FreeSewing software repositories
----
-
-FreeSewing uses the following repositories:
-
-
diff --git a/markdown/dev/reference/repos/freesewing.dev/en.md b/markdown/dev/reference/repos/freesewing.dev/en.md
deleted file mode 100644
index 6afc29f4b95..00000000000
--- a/markdown/dev/reference/repos/freesewing.dev/en.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: freesewing.dev
----
-
-
-
-
-
-This is the source code for [FreeSewing.dev](https://freesewing.dev), our developer documentation site,
-and the site you are browsing right now.
-
-It's a [JAMStack](https://jamstack.org/) site powered by [Gatsby](https://www.gatsbyjs.org/) and
-hosted by [Netlify](https://www.netlify.com/).
-
diff --git a/markdown/dev/reference/repos/freesewing.org/en.md b/markdown/dev/reference/repos/freesewing.org/en.md
deleted file mode 100644
index d6bd55f1c77..00000000000
--- a/markdown/dev/reference/repos/freesewing.org/en.md
+++ /dev/null
@@ -1,111 +0,0 @@
----
-title: freesewing.org
----
-
-
-
-
-
-This is the source code for [FreeSewing.org](https://freesewing.org), our main website.
-
-It's a [JAMStack](https://jamstack.org/) site powered by [Gatsby](https://www.gatsbyjs.org/) and
-hosted by [Netlify](https://www.netlify.com/).
-
-The content (documentation, blog posts, and so on) is kept in [our markdown repository](/reference/repos/markdown) and
-included in this repository as a submodule.
-
-## Getting started
-
-To run your own copy of our website, follow these steps:
-
-```bash
-git clone --recurse-submodules git@github.com:freesewing/freesewing.org.git
-cd freesewing
-npm install
-cp .env.example .env
-npm run develop
-```
-
-
-
-We're using the `--recurse-submodules` option to fetch the [markdown](/reference/repos/markdown) submodule in one go.
-However, this is only available in newer versions of git.
-
-If after cloning the `markdown` directory is empty,
-please check [these alternatives](https://stackoverflow.com/questions/3796927/how-to-git-clone-including-submodules).
-
-
-
-
-
-
-We're creating a copy of the `.env.example` file here as it contains required environment variables.
-For more details, see **Environment variables** below.
-
-
-
-Gatsby will build your site and make it avaialable on http://localhost:8000.
-
-
-
-There's also very useful GraphQL playground on http://localhost:8000/\_\_\_graphql
-
-
-
-## Dependencies
-
-### Backend
-
-Without a backend, certain aspects of the website won't work.
-The backend needs to be configured in the `GATSBY_BACKEND` environment variable.
-
-To facilitate development, our backend is available as a Docker image that you can spin up.
-See [the backend repo](/reference/repos/backend) for more info.
-
-### Tiler (svg2pdf)
-
-Without an svg2pdf backend (aka the tiler), the website won't be able to generate PDFs for patterns.
-The svg2pdf backend needs to be configured in the `GATSBY_TILER` environment variable.
-
-You can spin up your own version of [our svg2pdf repository](/reference/repos/tile).
-FreeSewing contributors can also simply point to https://tiler.freesewing.org.
-
-### Oauth
-
-The website allows signing up/logging in via your Github or Google account.
-
-We use Oauth for this, which has a few dependencies:
-
- - You need to create/configure an app with Github and Google for Oauth
- - You need to configure the various environment variables (see below)
-
-If you don't setup/configure Oauth, everything will work, except Oath (duh).
-
-### Algolia
-
-Algolia handles the search on the website.
-
-
-
-This feature is not yet implemented.
-
-
-
-## Environment variables
-
-The following variables configure different aspects of our website.
-The `.env.example` file contains the required variables to get the site up and running.
-
-| Var | Purpose | Example |
-|--------|---------|---------|
-| `GATSBY_LANGUAGE` | Determines the language of the site | `en` |
-| `GATSBY_FRONTEND` | URL under which the website is served | `http://localhost:8000/` |
-| `GATSBY_BACKEND` | The location of the data backend | `http://localhost:3000/` |
-| `GATSBY_TILER` | The location of the tiler backend | `http://localhost:4000/` |
-| `GATSBY_GITHUB_CLIENT_ID` | The Github client ID used for Oauth | `13734754d4aa03f5c70e` |
-| `GATSBY_GOOGLE_CLIENT_ID` | The Google client ID used for Oauth | `730107872143-l1gfa3e0eerads4clqu458pblgpnu54h.apps.googleusercontent.com` |
-| `GATSBY_ALGOLIA_API_ID` | The Algolia client ID for search (under construction) | `MA0Y5A2PF0` |
-| `GATSBY_ALGOLIA_SEARCH_KEY` | The Algolia *read only* key for search (under construction) | `9209470ad243eee797156aa2874d886c` |
-| `GATSBY_ALGOLIA_UPDATE_KEY` | The *write* key to update the Algolia search index at build time (under construction) | `ba780a3afe2118062ee08ea4fb54c097` |
-
-
diff --git a/markdown/dev/reference/repos/freesewing/en.md b/markdown/dev/reference/repos/freesewing/en.md
deleted file mode 100644
index 4eb35515a49..00000000000
--- a/markdown/dev/reference/repos/freesewing/en.md
+++ /dev/null
@@ -1,12 +0,0 @@
----
-title: freesewing
----
-
-
-
-
-
-This is a [monorepo](https://en.wikipedia.org/wiki/Monorepo) holding all
-our [NPM packages](/reference/packages/).
-We use [Lerna](https://lerna.js.org/) and [Yarn workspaces](https://yarnpkg.com/en/docs/workspaces) to manage the repo.
-
diff --git a/markdown/dev/reference/repos/svgtopdf/en.md b/markdown/dev/reference/repos/svgtopdf/en.md
deleted file mode 100644
index 94741764003..00000000000
--- a/markdown/dev/reference/repos/svgtopdf/en.md
+++ /dev/null
@@ -1,14 +0,0 @@
----
-title: svgtopdf
----
-
-
-
-
-
-This is a [Node.js](https://nodejs.org/) app using [Express](https://expressjs.com/) that
-turns SVGs into (tiled) PDFs.
-
-We've decided to implement this as a stand-alone app rather than integrate it into [our backend](/reference/repos/backend/) because
-while our backend is highly specific to our own website, this is a feature that others might want to re-use.
-
diff --git a/markdown/dev/reference/repos/tile/en.md b/markdown/dev/reference/repos/tile/en.md
deleted file mode 100644
index 64683e25f12..00000000000
--- a/markdown/dev/reference/repos/tile/en.md
+++ /dev/null
@@ -1,11 +0,0 @@
----
-title: tile
----
-
-
-
-
-
-This is a PostScript tiler, a command line utility written in C.
-
-It is used to go from SVG to tiled PDF by converting to PostScript first, then tiling it, and then converting the PostScript to PDF.