markilo 0.4.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +70 -47
- package/THIRD_PARTY_NOTICES.md +26 -12
- package/package.json +15 -1
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/THIRD_PARTY_NOTICES.md +26 -12
- package/plugin/agents/concept-designer.md +14 -5
- package/plugin/agents/design-critic.md +32 -3
- package/plugin/dist/markilo.mjs +213 -146
- package/plugin/fonts/alegreya-sans/OFL.txt +93 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-400-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-500-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-700-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-800-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/alegreya-sans/alegreya-sans-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/archivo/OFL.txt +93 -0
- package/plugin/fonts/archivo/archivo-latin-400-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-500-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-600-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-700-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-800-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-900-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/archivo/archivo-latin-ext-900-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/OFL.txt +93 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-400-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-500-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-600-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-700-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-800-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/atkinson-hyperlegible-next/atkinson-hyperlegible-next-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/OFL.txt +93 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-400-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-500-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-600-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-700-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-800-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/bricolage-grotesque/bricolage-grotesque-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/dm-serif-display/OFL.txt +93 -0
- package/plugin/fonts/dm-serif-display/dm-serif-display-latin-400-normal.woff +0 -0
- package/plugin/fonts/dm-serif-display/dm-serif-display-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/OFL.txt +93 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-400-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-500-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-600-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-700-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/familjen-grotesk/familjen-grotesk-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/fonts.json +628 -0
- package/plugin/fonts/instrument-serif/OFL.txt +93 -0
- package/plugin/fonts/instrument-serif/instrument-serif-latin-400-normal.woff +0 -0
- package/plugin/fonts/instrument-serif/instrument-serif-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/newsreader/OFL.txt +93 -0
- package/plugin/fonts/newsreader/newsreader-latin-400-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-500-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-600-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-700-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-800-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/newsreader/newsreader-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/OFL.txt +93 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-400-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-500-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-600-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-700-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-800-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-900-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/schibsted-grotesk/schibsted-grotesk-latin-ext-900-normal.woff +0 -0
- package/plugin/fonts/space-mono/OFL.txt +93 -0
- package/plugin/fonts/space-mono/space-mono-latin-400-normal.woff +0 -0
- package/plugin/fonts/space-mono/space-mono-latin-700-normal.woff +0 -0
- package/plugin/fonts/space-mono/space-mono-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/space-mono/space-mono-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/syne/OFL.txt +93 -0
- package/plugin/fonts/syne/syne-latin-400-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-500-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-600-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-700-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-800-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/syne/syne-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/unbounded/OFL.txt +93 -0
- package/plugin/fonts/unbounded/unbounded-latin-400-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-500-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-600-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-700-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-800-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-900-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-700-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-800-normal.woff +0 -0
- package/plugin/fonts/unbounded/unbounded-latin-ext-900-normal.woff +0 -0
- package/plugin/fonts/young-serif/OFL.txt +93 -0
- package/plugin/fonts/young-serif/young-serif-latin-400-normal.woff +0 -0
- package/plugin/fonts/young-serif/young-serif-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/OFL.txt +93 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-400-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-500-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-600-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-700-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-ext-400-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-ext-500-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-ext-600-normal.woff +0 -0
- package/plugin/fonts/zilla-slab/zilla-slab-latin-ext-700-normal.woff +0 -0
- package/plugin/skills/concepts/SKILL.md +4 -4
- package/plugin/skills/design/SKILL.md +35 -12
- package/plugin/skills/design/references/cli.md +37 -36
- package/plugin/skills/design/references/construction.md +34 -1
- package/plugin/skills/design/references/design-principles.md +30 -0
- package/plugin/skills/export/SKILL.md +4 -2
- package/plugin/skills/gallery/SKILL.md +7 -6
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2023 The Young Serif Project Authors (https://github.com/noirblancrouge/YoungSerif)
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
Copyright 2017, The Mozilla Foundation ZillaSlab-LightItalic.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-Regular.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-Italic.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-Medium.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-MediumItalic.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-SemiBold.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-SemiBoldItalic.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-Bold.ttf: Copyright 2017, The Mozilla Foundation ZillaSlab-BoldItalic.ttf: Copyright 2017, The Mozilla Foundation
|
|
2
|
+
|
|
3
|
+
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
|
4
|
+
This license is copied below, and is also available with a FAQ at:
|
|
5
|
+
http://scripts.sil.org/OFL
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
-----------------------------------------------------------
|
|
9
|
+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
|
10
|
+
-----------------------------------------------------------
|
|
11
|
+
|
|
12
|
+
PREAMBLE
|
|
13
|
+
The goals of the Open Font License (OFL) are to stimulate worldwide
|
|
14
|
+
development of collaborative font projects, to support the font creation
|
|
15
|
+
efforts of academic and linguistic communities, and to provide a free and
|
|
16
|
+
open framework in which fonts may be shared and improved in partnership
|
|
17
|
+
with others.
|
|
18
|
+
|
|
19
|
+
The OFL allows the licensed fonts to be used, studied, modified and
|
|
20
|
+
redistributed freely as long as they are not sold by themselves. The
|
|
21
|
+
fonts, including any derivative works, can be bundled, embedded,
|
|
22
|
+
redistributed and/or sold with any software provided that any reserved
|
|
23
|
+
names are not used by derivative works. The fonts and derivatives,
|
|
24
|
+
however, cannot be released under any other type of license. The
|
|
25
|
+
requirement for fonts to remain under this license does not apply
|
|
26
|
+
to any document created using the fonts or their derivatives.
|
|
27
|
+
|
|
28
|
+
DEFINITIONS
|
|
29
|
+
"Font Software" refers to the set of files released by the Copyright
|
|
30
|
+
Holder(s) under this license and clearly marked as such. This may
|
|
31
|
+
include source files, build scripts and documentation.
|
|
32
|
+
|
|
33
|
+
"Reserved Font Name" refers to any names specified as such after the
|
|
34
|
+
copyright statement(s).
|
|
35
|
+
|
|
36
|
+
"Original Version" refers to the collection of Font Software components as
|
|
37
|
+
distributed by the Copyright Holder(s).
|
|
38
|
+
|
|
39
|
+
"Modified Version" refers to any derivative made by adding to, deleting,
|
|
40
|
+
or substituting -- in part or in whole -- any of the components of the
|
|
41
|
+
Original Version, by changing formats or by porting the Font Software to a
|
|
42
|
+
new environment.
|
|
43
|
+
|
|
44
|
+
"Author" refers to any designer, engineer, programmer, technical
|
|
45
|
+
writer or other person who contributed to the Font Software.
|
|
46
|
+
|
|
47
|
+
PERMISSION & CONDITIONS
|
|
48
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
|
49
|
+
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
|
50
|
+
redistribute, and sell modified and unmodified copies of the Font
|
|
51
|
+
Software, subject to the following conditions:
|
|
52
|
+
|
|
53
|
+
1) Neither the Font Software nor any of its individual components,
|
|
54
|
+
in Original or Modified Versions, may be sold by itself.
|
|
55
|
+
|
|
56
|
+
2) Original or Modified Versions of the Font Software may be bundled,
|
|
57
|
+
redistributed and/or sold with any software, provided that each copy
|
|
58
|
+
contains the above copyright notice and this license. These can be
|
|
59
|
+
included either as stand-alone text files, human-readable headers or
|
|
60
|
+
in the appropriate machine-readable metadata fields within text or
|
|
61
|
+
binary files as long as those fields can be easily viewed by the user.
|
|
62
|
+
|
|
63
|
+
3) No Modified Version of the Font Software may use the Reserved Font
|
|
64
|
+
Name(s) unless explicit written permission is granted by the corresponding
|
|
65
|
+
Copyright Holder. This restriction only applies to the primary font name as
|
|
66
|
+
presented to the users.
|
|
67
|
+
|
|
68
|
+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
|
69
|
+
Software shall not be used to promote, endorse or advertise any
|
|
70
|
+
Modified Version, except to acknowledge the contribution(s) of the
|
|
71
|
+
Copyright Holder(s) and the Author(s) or with their explicit written
|
|
72
|
+
permission.
|
|
73
|
+
|
|
74
|
+
5) The Font Software, modified or unmodified, in part or in whole,
|
|
75
|
+
must be distributed entirely under this license, and must not be
|
|
76
|
+
distributed under any other license. The requirement for fonts to
|
|
77
|
+
remain under this license does not apply to any document created
|
|
78
|
+
using the Font Software.
|
|
79
|
+
|
|
80
|
+
TERMINATION
|
|
81
|
+
This license becomes null and void if any of the above conditions are
|
|
82
|
+
not met.
|
|
83
|
+
|
|
84
|
+
DISCLAIMER
|
|
85
|
+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
86
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
|
87
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
|
88
|
+
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
|
89
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
90
|
+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
|
91
|
+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
92
|
+
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
|
93
|
+
OTHER DEALINGS IN THE FONT SOFTWARE.
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -27,9 +27,9 @@ Toolchain: `node "${CLAUDE_PLUGIN_ROOT}/dist/markilo.mjs" <command>` (written `m
|
|
|
27
27
|
4. After the agents finish: `markilo diversity --brand <slug>`. Merge or replace directions that are too similar.
|
|
28
28
|
5. Ask the `markilo:design-critic` agent to review all concepts (it reads the review sheets and records judgment).
|
|
29
29
|
Apply the quality gate: the critic's blind brand-fit, distinctiveness and memorability each ≥ 6 and its "would a
|
|
30
|
-
senior designer present this?" is yes (`markilo concept list` shows `gate` per concept)
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
senior designer present this?" is yes (`markilo concept list` shows `gate` per concept). A failed concept's `next`
|
|
31
|
+
decides: `fix` goes back to a concept-designer once with exactly what the critic named; `reject` is set to `rejected`
|
|
32
|
+
so the gallery hides it — reworking a failed idea almost never works (1 of 34 in the benchmark). If fewer than two
|
|
33
|
+
pass, tell the user plainly and propose new directions instead of showing weak work.
|
|
34
34
|
6. `markilo gallery` and present: per concept, two lines (idea + measured strengths/risks) and the gallery path.
|
|
35
35
|
Ask the user which to refine.
|
|
@@ -67,12 +67,25 @@ Work through these stages. Tell the user which stage you are in. If they asked f
|
|
|
67
67
|
3. **Brief** — synthesize `markilo profile show --brand <slug>` into the brief
|
|
68
68
|
(`markilo brief update --brand <slug> --file …`). Ask only what you truly cannot infer — usually 2–5
|
|
69
69
|
questions, asked together, each with your suggested answer.
|
|
70
|
-
4. **
|
|
70
|
+
4. **Ideas, then directions.** Before any direction, write the idea longlist: at least 12 one-line visual hooks with
|
|
71
|
+
`markilo ideas --brand <slug> --add "<what a stranger sees at 32 px>" --means "<what it says>" --source
|
|
72
|
+
product|audience|name|type|abstract`, from at least three sources (see "Ideas before directions" in
|
|
73
|
+
`references/design-principles.md`). Then one `markilo:design-critic` agent in `ideas` mode strikes or keeps each one
|
|
74
|
+
from the words alone and ranks the kept ones — words are the cheapest place to lose a weak idea. In real-project runs
|
|
75
|
+
every direction drawn from a mechanism metaphor (a round trip, a crossing, a threshold, a keystone) became a bracket,
|
|
76
|
+
a cross, an arch or a gauge, and was read as a UI glyph. Build directions from the kept ideas, strongest first, and
|
|
77
|
+
record which idea each concept comes from (`markilo ideas --brand <slug> --idea <id> --concept <concept id>`). When
|
|
78
|
+
the user is here, show them the kept ideas before sketching; they often know which one is theirs.
|
|
79
|
+
**Explore** — propose 3–5 genuinely different creative directions (idea, metaphor, form language,
|
|
71
80
|
type, color, why it fits, risks). Different ideas, not variations of one idea. For each, write the visual hook —
|
|
72
81
|
the one thing the eye catches at 32 px — and what a stranger would see first; at most one direction may draw the product's own object or the name's literal noun (a page for
|
|
73
82
|
documents, a chart for finance, a moon for sleep — see "The product's own object is a cliché too" in
|
|
74
83
|
`references/design-principles.md`), and only with a named transformation; at most one may be built on the name's
|
|
75
84
|
initial; at least one must come from what the product does or the audience's world, with no letter and no object.
|
|
85
|
+
Unless the user wants a symbol above all, one direction is **wordmark-led** (`concept new … --lead wordmark`): the
|
|
86
|
+
name drawn from a good typeface with one or two letters changed so the word carries the idea, and a symbol cut from
|
|
87
|
+
that same drawing for icons. Where a category is full of pictograms (developer tools, SaaS), symbols drift into UI
|
|
88
|
+
icons; a crafted word starts from professionally drawn letters and is often the stronger identity.
|
|
76
89
|
Name each direction's form language from the brief's adjectives ("Form language follows the brief's character").
|
|
77
90
|
Let the user steer.
|
|
78
91
|
5. **Design**, in two passes so weak ideas die cheap:
|
|
@@ -81,9 +94,13 @@ Work through these stages. Tell the user which stage you are in. If they asked f
|
|
|
81
94
|
Before the review, every sketch must be `ready` in `markilo sketches` (no hairline gaps or failing checks); send
|
|
82
95
|
boards that are not back to their designer with the `fix` lines.
|
|
83
96
|
b. **Sketch review** — one `markilo:design-critic` agent reviews every board and records a pick or `none` per
|
|
84
|
-
concept (`--sketch-pick`).
|
|
85
|
-
|
|
86
|
-
|
|
97
|
+
concept (`--sketch-pick`). When the user is here, show them the boards before anything is developed — a sketch is
|
|
98
|
+
cheap, a developed mark that fails the gate is not: open the gallery (`markilo gallery --serve`; it shows every
|
|
99
|
+
board with the critic's reading and pick), ask them to pick a sketch per direction or accept the critic's picks,
|
|
100
|
+
then `markilo feedback --brand <slug> --apply` records their picks (a user's pick wins over the critic's, `none`
|
|
101
|
+
included). For `none`, send the direction back for one more sketch pass with the suggested move and a second
|
|
102
|
+
review, or drop it (`--status rejected`). Never override the critic with your own pick; with nobody to ask
|
|
103
|
+
(unattended), the critic's pick stands.
|
|
87
104
|
c. **Develop** — for each picked sketch, a concept-designer in `develop <sketch id>` mode finishes the mark:
|
|
88
105
|
measured variants, `symbol.svg`, `construction.json` and a wordmark that carries the idea in one or two letters.
|
|
89
106
|
6. **Verify** — `markilo verify --brand <slug> --concept <id>` for every concept, then
|
|
@@ -92,17 +109,23 @@ Work through these stages. Tell the user which stage you are in. If they asked f
|
|
|
92
109
|
to "would a senior designer present this as is?" (`--present`) and adds informed scores as feedback (`--judgment`).
|
|
93
110
|
**Quality gate:** a concept goes to the user only if the critic's blind brand-fit, distinctiveness and memorability
|
|
94
111
|
are each ≥ 6 and its answer is yes — read the result
|
|
95
|
-
from `markilo concept list --brand <slug>` (`gate: passed|failed`); `finalize` refuses
|
|
96
|
-
user chose it anyway (`--user-choice "<their reason>"`).
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
112
|
+
from `markilo concept list --brand <slug>` (`gate: passed|failed|undecided`); `finalize` refuses any concept that has
|
|
113
|
+
not passed unless the user chose it anyway (`--user-choice "<their reason>"`). `undecided` (`next: second-look`)
|
|
114
|
+
means the first cold look landed on the edge of the bar: start two fresh `markilo:design-critic` agents in parallel,
|
|
115
|
+
each told only `second-look <concept id>`, the brand slug and whether the concept is wordmark-led (never the
|
|
116
|
+
direction, the rationale or the first critic's notes), then read the gate
|
|
117
|
+
again — the majority of the three looks decides. The gate's `next` says what to do with a concept that
|
|
118
|
+
failed: `fix` (the cold scores clear the bar and only the critic's no, for a reason it named, stands in the way) gets
|
|
119
|
+
one round on exactly that, then a fresh critique; `reject` is set to `rejected`
|
|
120
|
+
(`markilo concept update --status rejected`) so the gallery hides it. Do not rework a rejected idea: in Markilo's
|
|
121
|
+
benchmark 1 of 34 concepts sent back after a failed gate passed later (after three rounds); every other pass came
|
|
122
|
+
from a first look. Spend the budget on new directions instead.
|
|
101
123
|
If fewer than two concepts pass, say so plainly, show what passed, and propose new directions — do not fill the
|
|
102
124
|
gallery with weak work. Two strong concepts beat four mediocre ones.
|
|
103
125
|
7. **Review** — open the gallery as the gallery skill describes (`markilo gallery --serve` in the background, or the
|
|
104
|
-
offline file), summarize each concept in two lines with its measured strengths and risks
|
|
105
|
-
|
|
126
|
+
offline file), summarize each concept in two lines with its measured strengths and risks (a concept that passed on
|
|
127
|
+
second looks passed at the edge: say so — in Markilo's 1.0 validation an independent panel rejected such passes), and ask the user to
|
|
128
|
+
decide there: Keep / Refine / Drop, pins on the mark, side-by-side comparison, then "Send to your agent". Read the
|
|
106
129
|
decisions with `markilo feedback --brand <slug>` instead of asking the user to retype them.
|
|
107
130
|
8. **Refine** — iterate on the chosen concept (optical corrections, construction, wordmark spacing,
|
|
108
131
|
palette), re-verifying each round. Then `markilo finalize --brand <slug> --concept <id> --tagline …`.
|
|
@@ -48,48 +48,49 @@ Topics: product, audience, market, competitor, visual-identity, typography, colo
|
|
|
48
48
|
|
|
49
49
|
## Design
|
|
50
50
|
|
|
51
|
-
| Command
|
|
52
|
-
|
|
|
53
|
-
| `concept new --brand s --id ID --title T --direction D --rationale R --semantics a,b --primary '#hex' [--secondary --accent --ink --paper] [--font id --weight n]`
|
|
54
|
-
| `concept list --brand s`
|
|
55
|
-
| `concept show --brand s --concept ID`
|
|
56
|
-
| `wordmarks --brand s --concept ID [--fonts a,b] [--weights 500,700] [--tracking -20,0,20] \| --pick wN`
|
|
57
|
-
| `sketches --brand s --concept ID`
|
|
58
|
-
| `construct spec.json -o out.svg [--guides c.png] [--set k=v,…]`
|
|
59
|
-
| `construct spec.json --brand s --concept ID [--vary [--max 24]] [--set k=v,…] [--member name] [--role small]`
|
|
60
|
-
| `wordmark --text T --font id --weight n -o out.svg [--tracking=-10] [--case lower] [--color '#hex'] [--locale tr]`
|
|
61
|
-
| `lockup --symbol a.svg --wordmark b.svg --layout horizontal\|stacked -o out.svg`
|
|
62
|
-
| `
|
|
63
|
-
| `
|
|
64
|
-
| `
|
|
65
|
-
| `
|
|
51
|
+
| Command | Purpose |
|
|
52
|
+
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
53
|
+
| `concept new --brand s --id ID --title T --direction D --rationale R --semantics a,b --primary '#hex' [--secondary --accent --ink --paper] [--font id --weight n] [--lead wordmark]` | Create `concepts/ID/`; then write `symbol.svg` there. |
|
|
54
|
+
| `concept list --brand s` | Concepts with status, files, palette and `gate` (`passed`, `failed`, `not-reviewed`) with the critic average. |
|
|
55
|
+
| `concept show --brand s --concept ID` | One concept with its files, palette, typography, critique and `gate`. |
|
|
56
|
+
| `wordmarks --brand s --concept ID [--fonts a,b] [--weights 500,700] [--tracking -20,0,20] \| --pick wN` | The name in several faces next to the symbol on `review/wordmarks.png`, measured; `--pick` commits one as `wordmark.svg` with its typography. |
|
|
57
|
+
| `sketches --brand s --concept ID` | Build `sketches/*.json` in the concept palette into `sketches/board.png` for the critic's sketch review; says which are `ready` (with `fix` lines). Specs with `members` also get `sketches/family.png`. |
|
|
58
|
+
| `construct spec.json -o out.svg [--guides c.png] [--set k=v,…]` | Build a mark from a construction spec (see construction.md). |
|
|
59
|
+
| `construct spec.json --brand s --concept ID [--vary [--max 24]] [--set k=v,…] [--member name] [--role small]` | Into the concept: `symbol.svg`, `construction.json`, `review/construction.png`; `--vary` ranks variants in `sketches/variants/`. |
|
|
60
|
+
| `wordmark --text T --font id --weight n -o out.svg [--tracking=-10] [--case lower] [--color '#hex'] [--locale tr]` | Outlined wordmark with real kerning. Negative tracking needs `=`. |
|
|
61
|
+
| `lockup --symbol a.svg --wordmark b.svg --layout horizontal\|stacked -o out.svg` | Cap-height aligned lockup. |
|
|
62
|
+
| `ideas --brand s [--add "<hook>" --means "<why>" --source product\|audience\|name\|type\|abstract] [--idea iN (--keep "<reading>" [--rank n] \| --strike "<reading>") \| --concept ID]` | The idea longlist before directions: designer adds hooks, critic keeps/strikes from the words and ranks; `next` says what follows. |
|
|
63
|
+
| `concept update --brand s --concept ID [--wordmark wordmark.svg] [--status shortlisted\|rejected] [--judgment memorability=8:"reason"] [--present yes\|no:"reason"] [--blind distinctiveness=n,memorability=n,brand-fit=n,craft=n,versatility=n] [--reviewer <model>] [--reads-as "a; b; c"] [--sketch-pick s3\|none --sketch-notes "…"] [--look <five scores> --look-present yes\|no:"reason"]` | Update files/status/judgment; `--look` records a fresh critic's second look when the gate says `second-look`. Criteria: brand-fit, semantic-relevance, distinctiveness, memorability, simplicity, balance, craft, typography, color, cultural-fit, timelessness, premium-perception, versatility. Prints the `gate` (blind scores when recorded) with `next` (`present`, `fix` once, `reject`, `second-look`), the `reviewer` and whether the gate was calibrated on it. |
|
|
64
|
+
| `color compare #a #b [#c…]` | ΔE00 and WCAG contrast between colors (e.g. an accent vs a well-known brand color). |
|
|
65
|
+
| `palette '#primary' [--secondary '#…'] [--accent '#…']` | OKLCH scales, neutrals, semantic colors, WCAG pairs. |
|
|
66
|
+
| `fonts` | Bundled OFL fonts (inter, manrope, space-grotesk, sora, dm-sans, outfit, plus-jakarta-sans, fraunces, ibm-plex-serif, jetbrains-mono). |
|
|
66
67
|
|
|
67
68
|
## Verify
|
|
68
69
|
|
|
69
|
-
| Command | Purpose
|
|
70
|
-
| ----------------------------------------------------------------------------------- |
|
|
71
|
-
| `verify --brand s --concept ID` | All checks; writes reports + `concepts/ID/review/symbol-sheet.png
|
|
72
|
-
| `diversity --brand s` | Pairwise similarity of active concepts.
|
|
73
|
-
| `originality --brand s --concept ID [--names a,b]` | Originality & Similarity Report only.
|
|
74
|
-
| `score file.svg [--role symbol\|wordmark\|lockup]` / `analyze file` / `compare a b` | Standalone measurements.
|
|
75
|
-
| `svg lint file.svg [--master]` | Master-file rules.
|
|
76
|
-
| `name check "Name" --against a,b,c` / `name trademark "Name" --describe "…"` | Name confusion and registry pre-screen plan.
|
|
77
|
-
| `render file.svg -o out.png [--sheet]` | PNG or review contact sheet.
|
|
70
|
+
| Command | Purpose |
|
|
71
|
+
| ----------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
72
|
+
| `verify --brand s --concept ID` | All checks; writes reports + `concepts/ID/review/symbol-sheet.png` (and `wordmark-sheet.png`). **Read the PNGs.** |
|
|
73
|
+
| `diversity --brand s` | Pairwise similarity of active concepts. |
|
|
74
|
+
| `originality --brand s --concept ID [--names a,b]` | Originality & Similarity Report only. |
|
|
75
|
+
| `score file.svg [--role symbol\|wordmark\|lockup]` / `analyze file` / `compare a b` | Standalone measurements. |
|
|
76
|
+
| `svg lint file.svg [--master]` | Master-file rules. |
|
|
77
|
+
| `name check "Name" --against a,b,c` / `name trademark "Name" --describe "…"` | Name confusion and registry pre-screen plan. |
|
|
78
|
+
| `render file.svg -o out.png [--sheet]` | PNG or review contact sheet. |
|
|
78
79
|
|
|
79
80
|
## Deliver
|
|
80
81
|
|
|
81
|
-
| Command
|
|
82
|
-
|
|
|
83
|
-
| `finalize --brand s --concept ID [--tagline T] [--note "usage rule"]... [--accept-risk] [--user-choice "why"] [--force]`
|
|
84
|
-
| `lock --brand s --primary '#hex' [--symbol f] [--wordmark f] [--lockup f]`
|
|
85
|
-
| `deliverables --brand s [--set g,…] [--add g,…] [--remove g,…]`
|
|
86
|
-
| `export --brand s [--only logos,web,ios,macos,android,windows,social,marketing,tokens,guidelines] [--all] [--clean]`
|
|
87
|
-
| `gallery [--brand s] [--serve [--port N]]`
|
|
88
|
-
| `feedback [--brand s] [--import file] [--apply]`
|
|
89
|
-
| `install-assets --brand s --framework auto\|next\|laravel\|flutter\|static [--project <dir>] [--apply] [--force]`
|
|
90
|
-
| `agent-setup --target codex\|cursor\|generic [--apply]`
|
|
91
|
-
| `shortcut install\|uninstall\|status [--yes]`
|
|
92
|
-
| `doctor`
|
|
82
|
+
| Command | Purpose |
|
|
83
|
+
| ------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
84
|
+
| `finalize --brand s --concept ID [--tagline T] [--note "usage rule"]... [--accept-risk] [--user-choice "why"] [--force]` | Freeze masters, build lockups (horizontal/stacked/compact), write `final/brand.json`. Refuses a concept that failed the critic gate unless `--user-choice`. |
|
|
85
|
+
| `lock --brand s --primary '#hex' [--symbol f] [--wordmark f] [--lockup f]` | Register an existing identity to preserve byte-for-byte. |
|
|
86
|
+
| `deliverables --brand s [--set g,…] [--add g,…] [--remove g,…]` | Which groups this brand needs; suggests from product type and platforms. |
|
|
87
|
+
| `export --brand s [--only logos,web,ios,macos,android,windows,social,marketing,tokens,guidelines] [--all] [--clean]` | Chosen groups (deliverables) + `asset-manifest.json`. |
|
|
88
|
+
| `gallery [--brand s] [--serve [--port N]]` | `brand/gallery/index.html`; `--serve` serves it on 127.0.0.1 (token, read-only, stops when idle) so "Send to your agent" saves decisions. |
|
|
89
|
+
| `feedback [--brand s] [--import file] [--apply]` | Decisions from the gallery: keep/refine/drop, tags, notes, pinned spots, preferred concept, ready-to-act requests; `--apply` sets concept status. |
|
|
90
|
+
| `install-assets --brand s --framework auto\|next\|laravel\|flutter\|static [--project <dir>] [--apply [--expect <planId>]] [--force]` | Files where the framework expects them (plan unless `--apply`; one transaction, replaced files backed up; `--expect` refuses a stale plan). Without `--framework`: `--group web --into public`. `install-assets --undo [--apply]` reverses the last installation. |
|
|
91
|
+
| `agent-setup --target codex\|cursor\|vscode\|generic [--model critic=<id>]... [--apply]` | The workflow for another coding agent, and the researcher, designer and critic as its sub-agents (`.codex/agents`, `.cursor/agents`, `.github/agents`) on the models named with `--model`. Dry run unless `--apply`. |
|
|
92
|
+
| `shortcut install\|uninstall\|status [--yes]` | Optional personal `/markilo` skill. |
|
|
93
|
+
| `doctor` | Environment check. |
|
|
93
94
|
|
|
94
95
|
Error codes: USAGE, NOT_FOUND, EXISTS, UNSAFE_PATH, INVALID_INPUT, INVALID_SVG, NETWORK_DISABLED, NETWORK,
|
|
95
96
|
ROBOTS_DISALLOWED, LOCKED, NO_WORKSPACE, INTERNAL.
|
|
@@ -58,7 +58,7 @@ With `--brand/--concept`, palette roles come from the concept, the result is wri
|
|
|
58
58
|
| `ring` | `c`, `r` (outer), `width` |
|
|
59
59
|
| `arc` | `c`, `r` (centre line), `from`, `to`, `width`, `cap` `butt`/`round`/`square` — a stroked arc as a filled shape |
|
|
60
60
|
| `sector` | `c`, `r`, `from`, `to`, `inner` (0 = pie slice) |
|
|
61
|
-
| `polygon` | `points`
|
|
61
|
+
| `polygon` | `points`; `smooth: true` draws one curved, filled outline through them (`tension`, and `sharp: [i…]` keeps those points as corners — the tip of a drop, the point of a leaf) |
|
|
62
62
|
| `regular` | `c`, `r`, `sides`, `rotate` |
|
|
63
63
|
| `star` | `c`, `r`, `inner`, `points`, `rotate` |
|
|
64
64
|
| `line` | `points`, `width`, `cap`, `join`, `smooth` (curve through the points), `closed` |
|
|
@@ -162,6 +162,10 @@ Each is a construction technique, not a shape to copy. Combine at most two.
|
|
|
162
162
|
- **Cut and shift**: `subtract` a thin band (`rect` rotated) through a solid, then `move` one side — motion,
|
|
163
163
|
precision, a "slice" of something.
|
|
164
164
|
- **Truncation**: `intersect` a form with a frame so it is cropped by the edge — tension, scale beyond the frame.
|
|
165
|
+
- **One silhouette**: the object as a single filled outline — a `polygon` with `smooth: true` through 6–12 points,
|
|
166
|
+
sharp only where the object has a point — instead of a stack of circles, bars and triangles. An object assembled
|
|
167
|
+
from separate primitives reads as a pictogram (a plumb bob built from a ring, a bar, a trapezoid and a triangle read
|
|
168
|
+
as a download arrow); one drawn outline with a particular proportion reads as a drawing.
|
|
165
169
|
- **Single gesture**: one `line` with `smooth: true`, consistent `width`, round caps, that draws the idea in one
|
|
166
170
|
movement. Avoid the generic swoosh; the path must describe something specific.
|
|
167
171
|
- **Modular system**: one unit (`defs`) repeated with `repeat` along a grid, where the arrangement itself is the
|
|
@@ -193,6 +197,35 @@ a terminal), on top of a calm, well-spaced typeface. Rebuilding every letter fro
|
|
|
193
197
|
harder to read, and it reads as a display face rather than a brand. Every letter must still be readable on its own:
|
|
194
198
|
check `e`, `a`, `w`, `m` and other complex forms at 1200 px and at 64 px wide.
|
|
195
199
|
|
|
200
|
+
A treatment can also run through the whole word instead of living in one letter — the usual way a coined name gets
|
|
201
|
+
character. Transforms on a `glyph` apply to every letter at once: `"round": 18` softens every corner and terminal,
|
|
202
|
+
`"grow": 6` adds weight evenly, and a `subtract` of one repeated `rect` (`repeat` with `step`) cuts every stem at the
|
|
203
|
+
same angle. Pick one treatment from the brief's form language, check it at 12 px, and keep the letters themselves
|
|
204
|
+
untouched.
|
|
205
|
+
|
|
206
|
+
### Wordmark-led concepts (`--lead wordmark`)
|
|
207
|
+
|
|
208
|
+
The word is the identity, so it is built, not typeset:
|
|
209
|
+
|
|
210
|
+
1. Choose the face on the wordmark board: `markilo wordmarks --brand <slug> --concept <id>` (the bundled faces,
|
|
211
|
+
weights and spacing, measured), and commit one with `--pick`.
|
|
212
|
+
2. Build the word as one spec with `glyph` and `"role": "wordmark"`, then change one or two letters with booleans so
|
|
213
|
+
they carry the idea — join two letters into a ligature, reshape a counter, extend or cut a terminal, share a stroke
|
|
214
|
+
between neighbours. Aim the change by the printed `glyphs` boxes (stem, bowl, x-height), not by eye.
|
|
215
|
+
3. Cut the icon from the same drawing: a second spec with the same `glyph` and the same change, keeping only the
|
|
216
|
+
changed letter or pair (`"letters": [i]`), fitted to the square — `construct … --role symbol`. Add a small version
|
|
217
|
+
when the change disappears at 16 px.
|
|
218
|
+
4. `markilo verify` writes `review/wordmark-sheet.png` (the word at 12–64 px on light, dark, black and white). Read it
|
|
219
|
+
as a stranger: the word must stay readable at 12 px, and the change must be visible at 24 px.
|
|
220
|
+
|
|
221
|
+
`construct` and `sketches` measure every changed letter against the font's own alphabet. A letter that now looks more
|
|
222
|
+
like another letter ("o" cut open on the right is a "c": the word reads "necn") makes the sketch not `ready`; a letter
|
|
223
|
+
that lost its counter (an e without its eye) or two letters merged into one shape is a note the critic weighs. Most
|
|
224
|
+
misread wordmarks in Markilo's benchmark came from exactly these: "portwise" read as "partwise", an "ll" as a "4" or
|
|
225
|
+
an "n", a "pinehold" whose e lost its eye. Change a terminal, a join or a counter's shape; keep the stroke that names
|
|
226
|
+
the letter. A separate element dropped into the word is read as punctuation: between letters a hyphen ("searve-x"),
|
|
227
|
+
over a letter an accent ("jourílo"), after the word a full stop. Put it inside a counter or attach it to a letter.
|
|
228
|
+
|
|
196
229
|
## Craft checklist
|
|
197
230
|
|
|
198
231
|
- One unit `u` and a few multiples of it for all widths, radii and gaps; a single corner radius family.
|
|
@@ -35,6 +35,27 @@ a bent arm. Independent judges call it "a common monogram device" every time. A
|
|
|
35
35
|
letter becomes something else at first sight (the reading is the idea, not "the letter T"), or when the letterform
|
|
36
36
|
itself is drawn with a character no font has.
|
|
37
37
|
|
|
38
|
+
## Ideas before directions
|
|
39
|
+
|
|
40
|
+
Write ideas as what a stranger would see, not as what they mean: "a lamp seen from above, its shade cut into the
|
|
41
|
+
initial" is a hook; "reliability" or "a round trip from audit to fix" is a meaning still looking for a picture. Rules
|
|
42
|
+
for the longlist (`markilo ideas`):
|
|
43
|
+
|
|
44
|
+
- At least 12 hooks from at least three sources: the product's mechanism, the audience's world (a tool, a gesture, a
|
|
45
|
+
material they know), the name (its letters, sound, meaning, the parts of a compound name), type (a face and a
|
|
46
|
+
treatment that carry the brand across the whole word) and abstract character.
|
|
47
|
+
- **Mechanism metaphors drawn with primitives become UI glyphs.** On three real developer products every such
|
|
48
|
+
direction — a round trip, a crossing point, a threshold, a keystone, an undertrace, a hinge — was drawn as brackets,
|
|
49
|
+
crosses, arches, gauges or loops, and read as a D, a return key, a headstone, a speedometer. Keep one only if the
|
|
50
|
+
hook names a specific, unusual form, not the concept.
|
|
51
|
+
- **Compound and meaningful names are the strongest source when they exist**: both identities that passed in the
|
|
52
|
+
benchmark drew the name's meaning inside its own letters (a q holding a dot like an egg in a nest; an n sheltering a
|
|
53
|
+
seed for a name that means a held pine). Coined names (no meaning to draw) lean on type: a distinctive face and one
|
|
54
|
+
treatment that runs through every letter, not one gimmick letter with a coloured accent ("a letter-plus-dot of the
|
|
55
|
+
generic kind").
|
|
56
|
+
- A coloured block, dot or tab added to one letter is the default move of every wordmark board; critics read it as
|
|
57
|
+
a cursor, a flag or a full stop. It needs a reason a stranger can see.
|
|
58
|
+
|
|
38
59
|
## Form language follows the brief's character
|
|
39
60
|
|
|
40
61
|
The same idea drawn with the wrong form language fails on brand fit. Decide the form language from the brief's
|
|
@@ -58,6 +79,15 @@ pictorial metaphor, an abstract geometric system, a typographic-only wordmark, a
|
|
|
58
79
|
directions that share the same idea are one direction. `markilo diversity` must report `low` risk between
|
|
59
80
|
directions at the explore stage.
|
|
60
81
|
|
|
82
|
+
**One direction is usually wordmark-led** (`concept new --lead wordmark`). A symbol has to be invented from nothing,
|
|
83
|
+
and in categories full of pictograms (developer tools, SaaS, analytics) an invented symbol is most often read as a
|
|
84
|
+
UI icon — a camera, a download arrow, a toggle. A wordmark starts from letters a type designer already drew well;
|
|
85
|
+
the identity is the word with one or two letters changed so they carry the idea (a ligature that joins two letters
|
|
86
|
+
the way the product joins two things, a counter that holds the product's object, a terminal that points), and the
|
|
87
|
+
icon is that changed letter or pair cut from the same drawing. It is judged as a word first: on the wordmark sheet
|
|
88
|
+
at 12–64 px, then the icon at 16 px. The change must be more than a slice or offset of a letter — that is the
|
|
89
|
+
initial-with-a-cut cliché again.
|
|
90
|
+
|
|
61
91
|
## Form
|
|
62
92
|
|
|
63
93
|
- **Simplicity**: as few elements as the idea allows. Aim for something a child could redraw from memory.
|