@jxsuite/starters 3.3.2 → 3.4.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.
Files changed (40) hide show
  1. package/package.json +5 -5
  2. package/sites/blog/package.json +3 -3
  3. package/sites/blog/project.jxn +86 -0
  4. package/sites/course/package.json +3 -3
  5. package/sites/course/project.jxn +94 -0
  6. package/sites/event/package.json +3 -3
  7. package/sites/event/project.jxn +114 -0
  8. package/sites/fitness-studio/package.json +3 -3
  9. package/sites/fitness-studio/project.jxn +124 -0
  10. package/sites/home-services/package.json +3 -3
  11. package/sites/home-services/project.jxn +113 -0
  12. package/sites/museum/package.json +3 -3
  13. package/sites/museum/project.jxn +130 -0
  14. package/sites/nonprofit/package.json +3 -3
  15. package/sites/nonprofit/project.jxn +99 -0
  16. package/sites/portfolio/package.json +3 -3
  17. package/sites/portfolio/project.jxn +85 -0
  18. package/sites/professional-firm/package.json +3 -3
  19. package/sites/professional-firm/project.jxn +94 -0
  20. package/sites/real-estate/package.json +3 -3
  21. package/sites/real-estate/project.jxn +103 -0
  22. package/sites/restaurant/package.json +3 -3
  23. package/sites/restaurant/project.jxn +93 -0
  24. package/sites/saas/package.json +3 -3
  25. package/sites/saas/project.jxn +119 -0
  26. package/sites/shop/package.json +3 -3
  27. package/sites/shop/project.jxn +100 -0
  28. package/sites/blog/project.json +0 -140
  29. package/sites/course/project.json +0 -141
  30. package/sites/event/project.json +0 -163
  31. package/sites/fitness-studio/project.json +0 -175
  32. package/sites/home-services/project.json +0 -160
  33. package/sites/museum/project.json +0 -179
  34. package/sites/nonprofit/project.json +0 -147
  35. package/sites/portfolio/project.json +0 -137
  36. package/sites/professional-firm/project.json +0 -145
  37. package/sites/real-estate/project.json +0 -163
  38. package/sites/restaurant/project.json +0 -145
  39. package/sites/saas/project.json +0 -166
  40. package/sites/shop/project.json +0 -156
@@ -0,0 +1,130 @@
1
+ /- kdl-version 2
2
+ $schema "./project.schema.json"
3
+ project Atrium
4
+
5
+ url "https://example.com"
6
+
7
+ defaults layout="./layouts/base.json" lang=en
8
+
9
+ i18n {
10
+ defaultLocale en
11
+ locales en fr-CA ar
12
+ routing prefix-except-default
13
+ }
14
+
15
+ $head {
16
+ meta name=viewport content="width=device-width, initial-scale=1"
17
+ meta name=description content="Atrium is the city museum of art and history — four centuries of the harbour, its makers and its maps, in a glass hall open to everyone, in English, French and Arabic."
18
+ link rel=icon href="/favicon.svg" type="image/svg+xml"
19
+ link rel=preconnect href="https://fonts.googleapis.com"
20
+ link rel=preconnect href="https://fonts.gstatic.com" crossorigin=""
21
+ link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Noto+Sans+Display:wght@400;500;700&family=Noto+Sans+Mono:wght@400;500&family=Noto+Serif:wght@400;500;600&family=Noto+Kufi+Arabic:wght@400;500;700&family=Noto+Naskh+Arabic:wght@400;500;600&display=swap"
22
+ }
23
+
24
+ $media {
25
+ --lg "(max-width: 1080px)"
26
+ --md "(max-width: 840px)"
27
+ --sm "(max-width: 600px)"
28
+ }
29
+
30
+ style {
31
+ --color-ink "#17181d"
32
+ --color-ink-deep "#0b0c10"
33
+ --color-chalk "#e7e3da"
34
+ --color-chalk-deep "#d8d3c6"
35
+ --color-card "#f7f5f0"
36
+ --color-pigment "#2438c8"
37
+ --color-pigment-deep "#182a9c"
38
+ --color-pigment-tint "rgba(36, 56, 200, 0.09)"
39
+ --color-clay "#ad4529"
40
+ --color-muted "#5c5a66"
41
+ --color-hairline "#cbc5b8"
42
+ --font-display "'Noto Sans Display', 'Noto Kufi Arabic', system-ui, -apple-system, sans-serif"
43
+ --font-text "'Noto Serif', 'Noto Naskh Arabic', Georgia, 'Times New Roman', serif"
44
+ --font-label "'Noto Sans Mono', 'Noto Kufi Arabic', ui-monospace, SFMono-Regular, Menlo, monospace"
45
+ --label-tracking "0.16em"
46
+ --label-case uppercase
47
+ --display-tracking "-0.035em"
48
+ --radius "0"
49
+ --max-width "1240px"
50
+ --measure "62ch"
51
+ --label-column "9.5rem"
52
+ --gutter "clamp(1.25rem, 4vw, 3rem)"
53
+ --band-space "clamp(3.25rem, 7vw, 6rem)"
54
+ --flip-inline "1"
55
+ --leading-scale "1"
56
+ margin "0"
57
+ padding "0"
58
+ fontFamily "var(--font-text)"
59
+ fontSize "17px"
60
+ lineHeight "1.7"
61
+ color "var(--color-ink)"
62
+ backgroundColor "var(--color-chalk)"
63
+ WebkitFontSmoothing antialiased
64
+ ":lang(ar)" {
65
+ --label-tracking "0"
66
+ --label-case none
67
+ --display-tracking "0"
68
+ --flip-inline "-1"
69
+ --leading-scale "1.35"
70
+ }
71
+ ":dir(rtl)" {
72
+ --flip-inline "-1"
73
+ }
74
+ ":lang(ar) h1, :lang(ar) h2, :lang(ar) h3" {
75
+ textWrap balance
76
+ }
77
+ }
78
+
79
+ images optimize=#false lazyLoad=#true
80
+
81
+ content {
82
+ exhibitions {
83
+ source "./content/exhibitions/{locale}/"
84
+ format Markdown
85
+ schema {
86
+ type object
87
+ properties {
88
+ title type=string description="Exhibition title, as it appears on the wall."
89
+ description {
90
+ type string
91
+ description "One-sentence standfirst for cards and search results."
92
+ }
93
+ date {
94
+ type string
95
+ description "Opening date, ISO 8601 (YYYY-MM-DD) — Intl/formatDate renders it in each page's own language."
96
+ }
97
+ until type=string description="Closing date, ISO 8601 (YYYY-MM-DD)."
98
+ gallery type=string description="Where in the building it hangs."
99
+ curator {
100
+ type string
101
+ description "Curator's name — a proper noun, so it stays the same in every language."
102
+ }
103
+ works {
104
+ type number
105
+ description "Number of objects on show; formatted with Intl/formatNumber, so Arabic pages get Arabic-Indic digits."
106
+ }
107
+ hue {
108
+ type number
109
+ description "Hue (0–360) of this exhibition's drawn plate. The starter ships no photographs; each card's art is CSS, generated from this one number."
110
+ }
111
+ enKey {
112
+ type string
113
+ description "This entry's id, repeated as a field only the English entries carry. Three translations share one id, and ContentEntry matches a field value across the whole collection — so each locale's detail route matches its own key field, and the value being the id is what keeps the three URLs parallel."
114
+ }
115
+ lang {
116
+ type string
117
+ description "BCP 47 tag of the directory this entry came from. One collection holds every language at once, so a locale's index filters on this to list only its own."
118
+ }
119
+ order type=number description="Running order on the exhibitions index."
120
+ }
121
+ required title description date until gallery lang
122
+ }
123
+ }
124
+ }
125
+
126
+ build outDir="./dist" format=directory trailingSlash=always
127
+
128
+ extensions {
129
+ - "@jxsuite/parser"
130
+ }
@@ -9,10 +9,10 @@
9
9
  "dev": "jx dev"
10
10
  },
11
11
  "dependencies": {
12
- "@jxsuite/parser": "^4.3.2"
12
+ "@jxsuite/parser": "^4.3.3"
13
13
  },
14
14
  "devDependencies": {
15
- "@jxsuite/compiler": "^8.4.0",
16
- "@jxsuite/runtime": "^6.2.1"
15
+ "@jxsuite/compiler": "^8.5.0",
16
+ "@jxsuite/runtime": "^6.2.2"
17
17
  }
18
18
  }
@@ -0,0 +1,99 @@
1
+ /- kdl-version 2
2
+ $schema "./project.schema.json"
3
+ project "Rivertown Foundation"
4
+
5
+ url "https://example.com"
6
+
7
+ defaults layout="./layouts/base.json" lang=en
8
+
9
+ $head {
10
+ meta name=viewport content="width=device-width, initial-scale=1"
11
+ meta name=description content="Rivertown Foundation is a community nonprofit running local programs in food security, youth mentoring, housing, and job training — powered by neighbors helping neighbors."
12
+ link rel=icon href="/favicon.svg"
13
+ link rel=preconnect href="https://fonts.googleapis.com"
14
+ link rel=preconnect href="https://fonts.gstatic.com" crossorigin=""
15
+ link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,400..700;1,9..144,400..600&family=Nunito:wght@400;500;600;700;800&display=swap"
16
+ }
17
+
18
+ $media {
19
+ -- "1200px"
20
+ --lg "(max-width: 1024px)"
21
+ --md "(max-width: 768px)"
22
+ --sm "(max-width: 560px)"
23
+ }
24
+
25
+ style {
26
+ --color-primary "#2f7d55"
27
+ --color-primary-hover "#256845"
28
+ --color-primary-deep "#173a2b"
29
+ --color-primary-soft "#e3efe6"
30
+ --color-accent "#f26a3d"
31
+ --color-accent-hover "#e0552b"
32
+ --color-accent-soft "#ffe6da"
33
+ --color-gold "#e9a63d"
34
+ --color-gold-soft "#fbeccf"
35
+ --color-ink "#22332a"
36
+ --color-bg-dark "#173a2b"
37
+ --color-bg-cream "#fbf5ec"
38
+ --color-bg-cream-deep "#f6ecda"
39
+ --color-bg-mint "#eef6ef"
40
+ --color-bg-white "#ffffff"
41
+ --color-text-primary "#23342b"
42
+ --color-text-secondary "#3f5147"
43
+ --color-text-muted "#61715f"
44
+ --color-text-white "#ffffff"
45
+ --color-border "#eadfce"
46
+ --color-border-strong "#dccdb4"
47
+ --font-display "'Fraunces', Georgia, 'Times New Roman', serif"
48
+ --font-heading "'Fraunces', Georgia, 'Times New Roman', serif"
49
+ --font-body "'Nunito', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
50
+ --max-width "1180px"
51
+ --max-width-wide "1300px"
52
+ --max-width-narrow "760px"
53
+ --radius "1.25rem"
54
+ --radius-sm "0.75rem"
55
+ --radius-lg "2rem"
56
+ --radius-pill "999px"
57
+ --shadow-card "0 2px 6px rgba(23,58,43,0.05), 0 20px 44px -26px rgba(23,58,43,0.3)"
58
+ --shadow-float "0 34px 74px -32px rgba(23,58,43,0.4)"
59
+ margin "0"
60
+ padding "0"
61
+ fontFamily "var(--font-body)"
62
+ fontSize "17px"
63
+ lineHeight "1.7"
64
+ color "var(--color-text-primary)"
65
+ backgroundColor "var(--color-bg-white)"
66
+ WebkitFontSmoothing antialiased
67
+ }
68
+
69
+ images {
70
+ optimize #true
71
+ widths 320 640 960 1280 1920
72
+ formats webp avif
73
+ quality webp=80 avif=65 jpeg=80 png=80
74
+ sizes "(max-width: 768px) 100vw, 50vw"
75
+ lazyLoad #true
76
+ }
77
+
78
+ content {
79
+ programs {
80
+ source "./content/programs/"
81
+ format Markdown
82
+ schema {
83
+ type object
84
+ properties {
85
+ title type=string
86
+ summary type=string
87
+ image type=string format=image
88
+ order type=number
89
+ }
90
+ required title summary
91
+ }
92
+ }
93
+ }
94
+
95
+ build outDir="./dist" format=directory trailingSlash=always
96
+
97
+ extensions {
98
+ - "@jxsuite/parser"
99
+ }
@@ -9,10 +9,10 @@
9
9
  "dev": "jx dev"
10
10
  },
11
11
  "dependencies": {
12
- "@jxsuite/parser": "^4.3.2"
12
+ "@jxsuite/parser": "^4.3.3"
13
13
  },
14
14
  "devDependencies": {
15
- "@jxsuite/compiler": "^8.4.0",
16
- "@jxsuite/runtime": "^6.2.1"
15
+ "@jxsuite/compiler": "^8.5.0",
16
+ "@jxsuite/runtime": "^6.2.2"
17
17
  }
18
18
  }
@@ -0,0 +1,85 @@
1
+ /- kdl-version 2
2
+ $schema "./project.schema.json"
3
+ project "Aperture Studio"
4
+
5
+ url "https://example.com"
6
+
7
+ defaults layout="./layouts/base.json" lang=en
8
+
9
+ $head {
10
+ meta name=viewport content="width=device-width, initial-scale=1"
11
+ meta name=description content="Aperture Studio — a photography and creative studio crafting image-forward stories across weddings, portraits, editorial, travel, food, and architecture."
12
+ link rel=icon href="/favicon.svg"
13
+ link rel=preconnect href="https://fonts.googleapis.com"
14
+ link rel=preconnect href="https://fonts.gstatic.com" crossorigin=""
15
+ link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500&family=Fraunces:opsz,wght@9..144,300;9..144,400&display=swap"
16
+ }
17
+
18
+ $media {
19
+ -- "1200px"
20
+ --lg "(max-width: 1024px)"
21
+ --md "(max-width: 768px)"
22
+ --sm "(max-width: 640px)"
23
+ }
24
+
25
+ style {
26
+ --color-primary "#c8a45c"
27
+ --color-primary-hover "#dcbd77"
28
+ --color-ink "#ece9e3"
29
+ --color-bg-dark "#161619"
30
+ --color-bg-cream "#161619"
31
+ --color-bg-white "#0c0c0d"
32
+ --color-bg "#0c0c0d"
33
+ --color-bg-elev "#161619"
34
+ --color-text-primary "#ece9e3"
35
+ --color-text-white "#ece9e3"
36
+ --color-text-muted "#8f8b82"
37
+ --color-border "#2a2a2e"
38
+ --color-line "#2a2a2e"
39
+ --color-accent "#c8a45c"
40
+ --font-heading "'Cormorant Garamond', Georgia, 'Times New Roman', serif"
41
+ --font-label "'Fraunces', Georgia, serif"
42
+ --max-width "1400px"
43
+ --max-width-narrow "760px"
44
+ --radius "0"
45
+ margin "0"
46
+ padding "0"
47
+ fontFamily "system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
48
+ lineHeight "1.6"
49
+ color "var(--color-text-primary)"
50
+ backgroundColor "var(--color-bg)"
51
+ }
52
+
53
+ images {
54
+ optimize #true
55
+ widths 320 640 960 1280 1920
56
+ formats webp avif
57
+ quality webp=80 avif=65 jpeg=80 png=80
58
+ sizes "(max-width: 768px) 100vw, 50vw"
59
+ lazyLoad #true
60
+ }
61
+
62
+ content {
63
+ projects {
64
+ source "./content/projects/"
65
+ format Markdown
66
+ schema {
67
+ type object
68
+ properties {
69
+ title type=string
70
+ category type=string
71
+ cover type=string format=image
72
+ year type=number
73
+ order type=number
74
+ slug type=string
75
+ }
76
+ required title category slug
77
+ }
78
+ }
79
+ }
80
+
81
+ build outDir="./dist" format=directory trailingSlash=always
82
+
83
+ extensions {
84
+ - "@jxsuite/parser"
85
+ }
@@ -9,10 +9,10 @@
9
9
  "dev": "jx dev"
10
10
  },
11
11
  "dependencies": {
12
- "@jxsuite/parser": "^4.3.2"
12
+ "@jxsuite/parser": "^4.3.3"
13
13
  },
14
14
  "devDependencies": {
15
- "@jxsuite/compiler": "^8.4.0",
16
- "@jxsuite/runtime": "^6.2.1"
15
+ "@jxsuite/compiler": "^8.5.0",
16
+ "@jxsuite/runtime": "^6.2.2"
17
17
  }
18
18
  }
@@ -0,0 +1,94 @@
1
+ /- kdl-version 2
2
+ $schema "./project.schema.json"
3
+ project "Meridian Advisory"
4
+
5
+ url "https://example.com"
6
+
7
+ defaults layout="./layouts/base.json" lang=en
8
+
9
+ $head {
10
+ meta name=viewport content="width=device-width, initial-scale=1"
11
+ meta name=description content="Meridian Advisory is a boutique CPA and advisory firm for founders and growing companies — tax, assurance, and fractional CFO counsel, published as a quarterly of practical financial thinking."
12
+ link rel=icon href="/favicon.svg"
13
+ link rel=preconnect href="https://fonts.googleapis.com"
14
+ link rel=preconnect href="https://fonts.gstatic.com" crossorigin=""
15
+ link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Spectral:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,400;1,500&family=Archivo:wght@400;500;600;700&display=swap"
16
+ }
17
+
18
+ $media {
19
+ -- "1200px"
20
+ --lg "(max-width: 1024px)"
21
+ --md "(max-width: 768px)"
22
+ --sm "(max-width: 640px)"
23
+ }
24
+
25
+ style {
26
+ --color-ink "#161a2c"
27
+ --color-ink-deep "#0d101d"
28
+ --color-navy "#1d2748"
29
+ --color-paper "#f4f1e9"
30
+ --color-paper-2 "#ece7da"
31
+ --color-surface "#fbf9f3"
32
+ --color-accent "#9a7b3c"
33
+ --color-accent-deep "#7c6230"
34
+ --color-muted "#605e55"
35
+ --color-rule "#161a2c"
36
+ --color-hairline "#d5cdba"
37
+ --color-primary "#161a2c"
38
+ --color-primary-hover "#242c4a"
39
+ --color-bg-dark "#0d101d"
40
+ --color-bg-cream "#ece7da"
41
+ --color-bg-white "#fbf9f3"
42
+ --color-text-primary "#161a2c"
43
+ --color-text-white "#f4f1e9"
44
+ --color-text-muted "#605e55"
45
+ --color-border "#d5cdba"
46
+ --font-serif "'Spectral', Georgia, 'Times New Roman', serif"
47
+ --font-sans "'Archivo', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
48
+ --font-heading "'Spectral', Georgia, 'Times New Roman', serif"
49
+ --max-width "1180px"
50
+ --max-width-narrow "720px"
51
+ --measure "660px"
52
+ --radius "0"
53
+ margin "0"
54
+ padding "0"
55
+ fontFamily "var(--font-sans)"
56
+ fontSize "17px"
57
+ lineHeight "1.6"
58
+ color "var(--color-ink)"
59
+ backgroundColor "var(--color-paper)"
60
+ }
61
+
62
+ images {
63
+ optimize #true
64
+ widths 320 640 960 1280 1920
65
+ formats webp avif
66
+ quality webp=80 avif=65 jpeg=80 png=80
67
+ sizes "(max-width: 768px) 100vw, 50vw"
68
+ lazyLoad #true
69
+ }
70
+
71
+ content {
72
+ insights {
73
+ source "./content/insights/"
74
+ format Markdown
75
+ schema {
76
+ type object
77
+ properties {
78
+ title type=string
79
+ excerpt type=string
80
+ date type=string
81
+ author type=string
82
+ category type=string
83
+ order type=number
84
+ }
85
+ required title excerpt date
86
+ }
87
+ }
88
+ }
89
+
90
+ build outDir="./dist" format=directory trailingSlash=always
91
+
92
+ extensions {
93
+ - "@jxsuite/parser"
94
+ }
@@ -9,10 +9,10 @@
9
9
  "dev": "jx dev"
10
10
  },
11
11
  "dependencies": {
12
- "@jxsuite/parser": "^4.3.2"
12
+ "@jxsuite/parser": "^4.3.3"
13
13
  },
14
14
  "devDependencies": {
15
- "@jxsuite/compiler": "^8.4.0",
16
- "@jxsuite/runtime": "^6.2.1"
15
+ "@jxsuite/compiler": "^8.5.0",
16
+ "@jxsuite/runtime": "^6.2.2"
17
17
  }
18
18
  }
@@ -0,0 +1,103 @@
1
+ /- kdl-version 2
2
+ $schema "./project.schema.json"
3
+ project "Northshore Realty"
4
+
5
+ url "https://example.com"
6
+
7
+ defaults layout="./layouts/base.json" lang=en
8
+
9
+ $head {
10
+ meta name=viewport content="width=device-width, initial-scale=1"
11
+ meta name=description content="Northshore Realty is the north shore's property index — search live listings by neighborhood, price, and bedrooms, then work with agents who actually live here."
12
+ link rel=icon href="/favicon.svg"
13
+ link rel=preconnect href="https://fonts.googleapis.com"
14
+ link rel=preconnect href="https://fonts.gstatic.com" crossorigin=""
15
+ link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&family=Spectral:ital,wght@0,400;0,500;0,600;1,400;1,500&display=swap"
16
+ }
17
+
18
+ $media {
19
+ -- "1200px"
20
+ --lg "(max-width: 1024px)"
21
+ --md "(max-width: 768px)"
22
+ --sm "(max-width: 640px)"
23
+ }
24
+
25
+ style {
26
+ --color-primary "#0f766e"
27
+ --color-primary-hover "#115e59"
28
+ --color-accent "#0d9488"
29
+ --color-accent-bright "#14b8a6"
30
+ --color-accent-soft "#ccfbf1"
31
+ --color-teal-tint "#f0fdfa"
32
+ --color-ink "#0b1220"
33
+ --color-navy "#0f172a"
34
+ --color-bg-dark "#0b1220"
35
+ --color-bg-ink-soft "#152238"
36
+ --color-bg-cream "#f6f8fb"
37
+ --color-bg-tint "#eef2f7"
38
+ --color-bg-white "#ffffff"
39
+ --color-text-primary "#0f172a"
40
+ --color-text-secondary "#334155"
41
+ --color-text-muted "#64748b"
42
+ --color-text-white "#ffffff"
43
+ --color-border "#e4e9f0"
44
+ --color-border-strong "#cbd5e1"
45
+ --color-status-new "#0d9488"
46
+ --font-display "'Spectral', Georgia, 'Times New Roman', serif"
47
+ --font-heading "'Plus Jakarta Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
48
+ --font-ui "'Plus Jakarta Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
49
+ --font-body "'Plus Jakarta Sans', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif"
50
+ --max-width "1240px"
51
+ --max-width-narrow "760px"
52
+ --radius "0.75rem"
53
+ --radius-sm "0.5rem"
54
+ --radius-lg "1.25rem"
55
+ --shadow-card "0 1px 2px rgba(15,23,42,0.04), 0 10px 26px -14px rgba(15,23,42,0.18)"
56
+ --shadow-float "0 30px 70px -28px rgba(11,18,32,0.42)"
57
+ margin "0"
58
+ padding "0"
59
+ fontFamily "var(--font-body)"
60
+ fontSize "17px"
61
+ lineHeight "1.6"
62
+ color "var(--color-text-primary)"
63
+ backgroundColor "var(--color-bg-white)"
64
+ WebkitFontSmoothing antialiased
65
+ }
66
+
67
+ images {
68
+ optimize #true
69
+ widths 320 640 960 1280 1920
70
+ formats webp avif
71
+ quality webp=80 avif=65 jpeg=80 png=80
72
+ sizes "(max-width: 768px) 100vw, 50vw"
73
+ lazyLoad #true
74
+ }
75
+
76
+ content {
77
+ listings {
78
+ source "./content/listings.csv"
79
+ format Csv
80
+ schema {
81
+ type object
82
+ properties {
83
+ Title type=string
84
+ slug type=string
85
+ price type=number
86
+ beds type=number
87
+ baths type=number
88
+ sqft type=number
89
+ city type=string
90
+ image type=string format=image
91
+ status type=string
92
+ order type=number
93
+ }
94
+ required Title slug
95
+ }
96
+ }
97
+ }
98
+
99
+ build outDir="./dist" format=directory trailingSlash=always
100
+
101
+ extensions {
102
+ - "@jxsuite/parser"
103
+ }
@@ -9,10 +9,10 @@
9
9
  "dev": "jx dev"
10
10
  },
11
11
  "dependencies": {
12
- "@jxsuite/parser": "^4.3.2"
12
+ "@jxsuite/parser": "^4.3.3"
13
13
  },
14
14
  "devDependencies": {
15
- "@jxsuite/compiler": "^8.4.0",
16
- "@jxsuite/runtime": "^6.2.1"
15
+ "@jxsuite/compiler": "^8.5.0",
16
+ "@jxsuite/runtime": "^6.2.2"
17
17
  }
18
18
  }
@@ -0,0 +1,93 @@
1
+ /- kdl-version 2
2
+ $schema "./project.schema.json"
3
+ project "Bistro & Café"
4
+
5
+ url "https://example.com"
6
+
7
+ defaults layout="./layouts/base.json" lang=en
8
+
9
+ $head {
10
+ meta name=viewport content="width=device-width, initial-scale=1"
11
+ meta name=description content="A neighborhood bistro and café serving seasonal plates, house pastries, and small-batch coffee."
12
+ link rel=icon href="/favicon.svg"
13
+ link rel=preconnect href="https://fonts.googleapis.com"
14
+ link rel=preconnect href="https://fonts.gstatic.com" crossorigin=""
15
+ link rel=stylesheet href="https://fonts.googleapis.com/css2?family=Playfair+Display:ital,wght@0,400;0,500;0,600;0,700;0,800;0,900;1,400;1,500;1,600;1,700&family=Mulish:wght@300;400;500;600;700;800&display=swap"
16
+ }
17
+
18
+ $media {
19
+ -- "1200px"
20
+ --lg "(max-width: 1024px)"
21
+ --md "(max-width: 768px)"
22
+ --sm "(max-width: 640px)"
23
+ }
24
+
25
+ style {
26
+ --color-primary "#bd5a34"
27
+ --color-primary-hover "#a44827"
28
+ --color-amber "#c98a3c"
29
+ --color-ink "#241b14"
30
+ --color-espresso "#1e150f"
31
+ --color-bg-dark "#1e150f"
32
+ --color-bg-cream "#efe3d1"
33
+ --color-bg-paper "#f6ecdb"
34
+ --color-bg-white "#fffaf2"
35
+ --color-text-primary "#2a1f17"
36
+ --color-text-white "#f6ecdb"
37
+ --color-text-muted "#7c6a58"
38
+ --color-border "#e2d5bf"
39
+ --color-border-strong "#cbb99d"
40
+ --color-accent "#bd5a34"
41
+ --font-heading "'Playfair Display', Georgia, 'Times New Roman', serif"
42
+ --font-body "'Mulish', system-ui, -apple-system, 'Segoe UI', sans-serif"
43
+ --max-width "1200px"
44
+ --max-width-wide "1320px"
45
+ --max-width-narrow "780px"
46
+ --radius "0.25rem"
47
+ margin "0"
48
+ padding "0"
49
+ fontFamily "var(--font-body)"
50
+ fontSize "17px"
51
+ lineHeight "1.7"
52
+ color "var(--color-text-primary)"
53
+ backgroundColor "var(--color-bg-paper)"
54
+ "& a" {
55
+ color "var(--color-primary)"
56
+ textUnderlineOffset "0.2em"
57
+ textDecorationColor "var(--color-border-strong)"
58
+ }
59
+ }
60
+
61
+ images {
62
+ optimize #true
63
+ widths 320 640 960 1280 1920
64
+ formats webp avif
65
+ quality webp=80 avif=65 jpeg=80 png=80
66
+ sizes "(max-width: 768px) 100vw, 50vw"
67
+ lazyLoad #true
68
+ }
69
+
70
+ content {
71
+ menu {
72
+ source "./content/menu/"
73
+ format Markdown
74
+ schema {
75
+ type object
76
+ properties {
77
+ name type=string
78
+ course type=string
79
+ price type=string
80
+ description type=string
81
+ image type=string format=image
82
+ order type=number
83
+ }
84
+ required name course
85
+ }
86
+ }
87
+ }
88
+
89
+ build outDir="./dist" format=directory trailingSlash=always
90
+
91
+ extensions {
92
+ - "@jxsuite/parser"
93
+ }