staticky 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +11 -0
  4. data/CHANGELOG.md +5 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +163 -0
  7. data/Rakefile +12 -0
  8. data/bin/staticky +7 -0
  9. data/lib/staticky/builder.rb +62 -0
  10. data/lib/staticky/cli.rb +71 -0
  11. data/lib/staticky/container.rb +26 -0
  12. data/lib/staticky/deps.rb +5 -0
  13. data/lib/staticky/environment.rb +8 -0
  14. data/lib/staticky/error.rb +5 -0
  15. data/lib/staticky/filesystem.rb +29 -0
  16. data/lib/staticky/generator.rb +63 -0
  17. data/lib/staticky/phlex/view_helpers.rb +16 -0
  18. data/lib/staticky/resource.rb +25 -0
  19. data/lib/staticky/router/definition.rb +49 -0
  20. data/lib/staticky/router.rb +35 -0
  21. data/lib/staticky/server.rb +48 -0
  22. data/lib/staticky/version.rb +5 -0
  23. data/lib/staticky/view_context.rb +17 -0
  24. data/lib/staticky.rb +51 -0
  25. data/site_template/.dockerignore +4 -0
  26. data/site_template/.gitignore +11 -0
  27. data/site_template/.prettierrc +6 -0
  28. data/site_template/.rspec +1 -0
  29. data/site_template/.rubocop.yml +8 -0
  30. data/site_template/.ruby-version +1 -0
  31. data/site_template/Dockerfile +47 -0
  32. data/site_template/Gemfile +33 -0
  33. data/site_template/Procfile.dev +3 -0
  34. data/site_template/README.md +98 -0
  35. data/site_template/Rakefile +18 -0
  36. data/site_template/app/views/errors/not_found.rb +14 -0
  37. data/site_template/app/views/errors/service_error.rb +14 -0
  38. data/site_template/app/views/layouts/error.rb +13 -0
  39. data/site_template/app/views/layouts/head.rb +60 -0
  40. data/site_template/app/views/layouts/site.rb +37 -0
  41. data/site_template/app/views/pages/home.rb +22 -0
  42. data/site_template/app/views/ui/.keep +0 -0
  43. data/site_template/app/views/ui/footer.rb +21 -0
  44. data/site_template/app/views/ui/navbar.rb +19 -0
  45. data/site_template/bin/console +11 -0
  46. data/site_template/bin/dev +12 -0
  47. data/site_template/bin/lint +18 -0
  48. data/site_template/bin/staticky +28 -0
  49. data/site_template/config/boot.rb +15 -0
  50. data/site_template/config/routes.rb +9 -0
  51. data/site_template/config/site.erb +12 -0
  52. data/site_template/config/vite.json +17 -0
  53. data/site_template/config.ru +8 -0
  54. data/site_template/content/.keep +0 -0
  55. data/site_template/content/demo.md +12 -0
  56. data/site_template/frontend/controllers/.keep +0 -0
  57. data/site_template/frontend/controllers/index.js +3 -0
  58. data/site_template/frontend/entrypoints/application.js +8 -0
  59. data/site_template/frontend/images/.keep +0 -0
  60. data/site_template/frontend/images/hero.jpg +0 -0
  61. data/site_template/frontend/stylesheets/application.css +61 -0
  62. data/site_template/frontend/stylesheets/syntax.css +151 -0
  63. data/site_template/frontend/tailwindcss/variable_font_plugin.js +103 -0
  64. data/site_template/frontend/turbo_transitions.js +54 -0
  65. data/site_template/lib/component.rb +32 -0
  66. data/site_template/lib/icon.rb +39 -0
  67. data/site_template/lib/layout.rb +4 -0
  68. data/site_template/lib/page.rb +11 -0
  69. data/site_template/lib/vite_helpers.rb +38 -0
  70. data/site_template/logs/.keep +0 -0
  71. data/site_template/nginx.conf +59 -0
  72. data/site_template/package.json +31 -0
  73. data/site_template/postcss.config.js +6 -0
  74. data/site_template/public/android-chrome-192x192.png +0 -0
  75. data/site_template/public/android-chrome-512x512.png +0 -0
  76. data/site_template/public/apple-touch-icon.png +0 -0
  77. data/site_template/public/favicon-16x16.png +0 -0
  78. data/site_template/public/favicon-32x32.png +0 -0
  79. data/site_template/public/favicon.ico +0 -0
  80. data/site_template/public/robots.txt.erb +1 -0
  81. data/site_template/public/site.webmanifest.erb +19 -0
  82. data/site_template/public/sitemap.xml +0 -0
  83. data/site_template/spec/spec_helper.rb +30 -0
  84. data/site_template/spec/views/pages/home_spec.rb +9 -0
  85. data/site_template/tailwind.config.js +83 -0
  86. data/site_template/vite.config.ts +14 -0
  87. metadata +273 -0
File without changes
@@ -0,0 +1,12 @@
1
+ ---
2
+ title: Some Post
3
+ date: 2024-03-02
4
+ description: >-
5
+ This is a description in front matter
6
+ categories:
7
+ - Something
8
+ tags:
9
+ - A tag
10
+ ---
11
+
12
+ This is the start of a great blog post
File without changes
@@ -0,0 +1,3 @@
1
+ import { Application } from "@hotwired/stimulus"
2
+
3
+ window.Stimulus = Application.start()
@@ -0,0 +1,8 @@
1
+ import "@fontsource-variable/inter"
2
+ import "protos-stimulus"
3
+
4
+ import "~/stylesheets/application.css"
5
+ import "~/stylesheets/syntax.css"
6
+
7
+ import "~/controllers"
8
+ import "~/turbo_transitions.js"
File without changes
@@ -0,0 +1,61 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ @layer base {
6
+ :root {
7
+ --spacing-xs: clamp(0.5rem, 1%, 1rem);
8
+ --spacing-sm: clamp(0.75rem, 3%, 1.2rem);
9
+ --spacing-md: clamp(1.25rem, 6%, 2.5rem);
10
+ --spacing-lg: clamp(3rem, 12%, 6rem);
11
+ --spacing-xl: clamp(6rem, 24%, 12rem);
12
+ --spacing-gap-xs: clamp(0.5rem, 1vmax, 1rem);
13
+ --spacing-gap-sm: clamp(1rem, 3vmax, 1.5rem);
14
+ --spacing-gap-md: clamp(1.5rem, 6vmax, 3rem);
15
+ --spacing-gap-lg: clamp(3rem, 8vmax, 4rem);
16
+ --spacing-gap-xl: clamp(4rem, 12vmax, 6rem);
17
+ --shadow-color: var(--b3);
18
+ --box-shadow-sm:
19
+ 0.3px 0.5px 0.5px oklch(var(--shadow-color) / 0.49),
20
+ 0.5px 0.7px 0.8px -1.9px oklch(var(--shadow-color) / 0.38),
21
+ 1.3px 1.9px 2.2px -3.7px oklch(var(--shadow-color) / 0.27);
22
+ --box-shadow-md:
23
+ 0.3px 0.5px 0.5px oklch(var(--shadow-color) / 0.51),
24
+ 0.8px 1.2px 1.4px -1.2px oklch(var(--shadow-color) / 0.43),
25
+ 2.3px 3.6px 4px -2.5px oklch(var(--shadow-color) / 0.34),
26
+ 6.3px 9.6px 10.8px -3.7px oklch(var(--shadow-color) / 0.26);
27
+ --box-shadow-lg:
28
+ 0.3px 0.5px 0.5px oklch(var(--shadow-color) / 0.54),
29
+ 1.3px 1.9px 2.2px -0.6px oklch(var(--shadow-color) / 0.49),
30
+ 2.7px 4.1px 4.6px -1.2px oklch(var(--shadow-color) / 0.44),
31
+ 5.5px 8.4px 9.4px -1.9px oklch(var(--shadow-color) / 0.39),
32
+ 10.6px 16.1px 18.1px -2.5px oklch(var(--shadow-color) / 0.34),
33
+ 18.7px 28.4px 31.9px -3.1px oklch(var(--shadow-color) / 0.29),
34
+ 30.7px 46.6px 52.3px -3.7px oklch(var(--shadow-color) / 0.23);
35
+ --navbar-height: 64px;
36
+ --main-scene: calc(100vh - var(--navbar-height));
37
+ --viewport-padding: var(--spacing-md);
38
+ }
39
+
40
+ body {
41
+ @apply bg-base-400;
42
+ }
43
+
44
+ .prose pre {
45
+ @apply bg-base-300 border;
46
+ }
47
+
48
+ * {
49
+ scrollbar-color: theme("colors.base-200") theme("colors.base-300");
50
+ border-color: theme("colors.base-200");
51
+ }
52
+
53
+ /* Chrome, Edge, and Safari */
54
+ *::-webkit-scrollbar {
55
+ background: theme("colors.base-300")
56
+ }
57
+
58
+ *::-webkit-scrollbar-track {
59
+ background: theme("colors.base-200");
60
+ }
61
+ }
@@ -0,0 +1,151 @@
1
+ .highlight table td {
2
+ padding: 5px;
3
+ }
4
+
5
+ .highlight table pre {
6
+ margin: 0;
7
+ }
8
+
9
+ .highlight,
10
+ .highlight .w {
11
+ color: #abb2bf;
12
+ }
13
+
14
+ .highlight .err {
15
+ color: #282c34;
16
+ background-color: #e06c75;
17
+ }
18
+
19
+ .highlight .c,
20
+ .highlight .ch,
21
+ .highlight .cd,
22
+ .highlight .cm,
23
+ .highlight .cpf,
24
+ .highlight .c1,
25
+ .highlight .cs {
26
+ color: #545862;
27
+ }
28
+
29
+ .highlight .cp {
30
+ color: #e5c07b;
31
+ }
32
+
33
+ .highlight .nt {
34
+ color: #e5c07b;
35
+ }
36
+
37
+ .highlight .o,
38
+ .highlight .ow {
39
+ color: #abb2bf;
40
+ }
41
+
42
+ .highlight .p,
43
+ .highlight .pi {
44
+ color: #abb2bf;
45
+ }
46
+
47
+ .highlight .gi {
48
+ color: #98c379;
49
+ }
50
+
51
+ .highlight .gd {
52
+ color: #e06c75;
53
+ }
54
+
55
+ .highlight .gh {
56
+ color: #61afef;
57
+ background-color: #282c34;
58
+ font-weight: bold;
59
+ }
60
+
61
+ .highlight .k,
62
+ .highlight .kn,
63
+ .highlight .kp,
64
+ .highlight .kr,
65
+ .highlight .kv {
66
+ color: #c678dd;
67
+ }
68
+
69
+ .highlight .kc {
70
+ color: #d19a66;
71
+ }
72
+
73
+ .highlight .kt {
74
+ color: #d19a66;
75
+ }
76
+
77
+ .highlight .kd {
78
+ color: #d19a66;
79
+ }
80
+
81
+ .highlight .s,
82
+ .highlight .sb,
83
+ .highlight .sc,
84
+ .highlight .dl,
85
+ .highlight .sd,
86
+ .highlight .s2,
87
+ .highlight .sh,
88
+ .highlight .sx,
89
+ .highlight .s1 {
90
+ color: #98c379;
91
+ }
92
+
93
+ .highlight .sa {
94
+ color: #c678dd;
95
+ }
96
+
97
+ .highlight .sr {
98
+ color: #56b6c2;
99
+ }
100
+
101
+ .highlight .si {
102
+ color: #be5046;
103
+ }
104
+
105
+ .highlight .se {
106
+ color: #be5046;
107
+ }
108
+
109
+ .highlight .nn {
110
+ color: #e5c07b;
111
+ }
112
+
113
+ .highlight .nc {
114
+ color: #e5c07b;
115
+ }
116
+
117
+ .highlight .no {
118
+ color: #e5c07b;
119
+ }
120
+
121
+ .highlight .na {
122
+ color: #61afef;
123
+ }
124
+
125
+ .highlight .m,
126
+ .highlight .mb,
127
+ .highlight .mf,
128
+ .highlight .mh,
129
+ .highlight .mi,
130
+ .highlight .il,
131
+ .highlight .mo,
132
+ .highlight .mx {
133
+ color: #98c379;
134
+ }
135
+
136
+ .highlight .ss {
137
+ color: #98c379;
138
+ }
139
+
140
+ .highlight .nf {
141
+ color: #61afef;
142
+ }
143
+
144
+ .highlight .err {
145
+ color: #353b45;
146
+ background-color: #e06c75;
147
+ }
148
+
149
+ .highlight .c1 {
150
+ color: #969DA8;
151
+ }
@@ -0,0 +1,103 @@
1
+ // This is a custom plugin for Tailwind CSS to enable font-variation-settings
2
+ import plugin from "tailwindcss/plugin";
3
+
4
+ const fontVariationSettings = plugin(function ({ addUtilities }) {
5
+ addUtilities({
6
+ ".font-thin": {
7
+ fontWeight: 100,
8
+ fontVariationSettings: '"wght" 100',
9
+ "&.italic": {
10
+ fontVariationSettings: '"slnt" -10, "wght" 100',
11
+ },
12
+ },
13
+ });
14
+
15
+ addUtilities({
16
+ ".font-extralight": {
17
+ fontWeight: 200,
18
+ fontVariationSettings: '"wght" 200',
19
+ "&.italic": {
20
+ fontVariationSettings: '"slnt" -10, "wght" 200',
21
+ },
22
+ },
23
+ });
24
+
25
+ addUtilities({
26
+ ".font-light": {
27
+ fontWeight: 300,
28
+ fontVariationSettings: '"wght" 300',
29
+ "&.italic": {
30
+ fontVariationSettings: '"slnt" -10, "wght" 300',
31
+ },
32
+ },
33
+ });
34
+
35
+ addUtilities({
36
+ ".font-normal": {
37
+ fontWeight: 400,
38
+ fontVariationSettings: '"wght" 400',
39
+ "&.italic": {
40
+ fontVariationSettings: '"slnt" -10, "wght" 400',
41
+ },
42
+ },
43
+ });
44
+
45
+ addUtilities({
46
+ ".font-medium": {
47
+ fontWeight: 500,
48
+ fontVariationSettings: '"wght" 500',
49
+ "&.italic": {
50
+ fontVariationSettings: '"slnt" -10, "wght" 500',
51
+ },
52
+ },
53
+ });
54
+
55
+ addUtilities({
56
+ ".font-semibold": {
57
+ fontWeight: 600,
58
+ fontVariationSettings: '"wght" 600',
59
+ "&.italic": {
60
+ fontVariationSettings: '"slnt" -10, "wght" 600',
61
+ },
62
+ },
63
+ });
64
+
65
+ addUtilities({
66
+ ".font-bold": {
67
+ fontWeight: 700,
68
+ fontVariationSettings: '"wght" 700',
69
+ "&.italic": {
70
+ fontVariationSettings: '"slnt" -10, "wght" 700',
71
+ },
72
+ },
73
+ });
74
+
75
+ addUtilities({
76
+ ".font-extrabold": {
77
+ fontWeight: 800,
78
+ fontVariationSettings: '"wght" 800',
79
+ "&.italic": {
80
+ fontVariationSettings: '"slnt" -10, "wght" 800',
81
+ },
82
+ },
83
+ });
84
+
85
+ addUtilities({
86
+ ".font-black": {
87
+ fontWeight: 900,
88
+ fontVariationSettings: '"wght" 900',
89
+ "&.italic": {
90
+ fontVariationSettings: '"slnt" -10, "wght" 900',
91
+ },
92
+ },
93
+ });
94
+
95
+ addUtilities({
96
+ ".italic": {
97
+ fontStyle: "italic",
98
+ fontVariationSettings: '"slnt" -10',
99
+ },
100
+ });
101
+ });
102
+
103
+ export default fontVariationSettings;
@@ -0,0 +1,54 @@
1
+ document.addEventListener("turbo:visit", () => {
2
+ let main = document.querySelector("main");
3
+ if (main.dataset.turboTransition == "false") return;
4
+
5
+ let [movement, scale] = ["15px", "0.99"];
6
+
7
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
8
+ [movement, scale] = ["7px", "1"];
9
+ }
10
+
11
+ main.style.transformOrigin = "50% 0%";
12
+ main.dataset.animatingOut = true;
13
+
14
+ main.animate(
15
+ [
16
+ { opacity: 1, transform: "translateY(0px) scale(1)" },
17
+ { opacity: 0, transform: `translateY(${movement}) scale(${scale})` },
18
+ ],
19
+ {
20
+ duration: 300,
21
+ easing: "cubic-bezier(0.45, 0, 0.55, 1)",
22
+ fill: "forwards",
23
+ },
24
+ );
25
+
26
+ Promise.all(main.getAnimations().map((animation) => animation.finished)).then(
27
+ () => {
28
+ if (main.dataset.animatingOut) main.style.visibility = "hidden";
29
+ },
30
+ );
31
+ });
32
+
33
+ document.addEventListener("turbo:load", () => {
34
+ let main = document.querySelector("main");
35
+ if (main.dataset.turboTransition == "false") return;
36
+
37
+ let [movement, scale] = ["-10px", "0.99"];
38
+
39
+ if (window.matchMedia("(prefers-reduced-motion: reduce)").matches) {
40
+ [movement, scale] = ["-5px", "1"];
41
+ }
42
+
43
+ main.style.visibility = "visible";
44
+ main.style.transformOrigin = "50% 0%";
45
+ delete main.dataset.animatingOut;
46
+
47
+ main.animate(
48
+ [
49
+ { opacity: 0, transform: `translateY(${movement}) scale(${scale})` },
50
+ { opacity: 1, transform: "translateY(0px) scale(1)" },
51
+ ],
52
+ { duration: 150, easing: "cubic-bezier(0.45, 0, 0.55, 1)" },
53
+ );
54
+ });
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "staticky/phlex/view_helpers"
4
+
5
+ class Component < Protos::Component
6
+ include ViteHelpers
7
+
8
+ class NullViewContext
9
+ def root? = true
10
+ def current_path = "/"
11
+ end
12
+
13
+ def helpers
14
+ @_view_context ||= NullViewContext.new # rubocop:disable Naming/MemoizedInstanceVariableName
15
+ end
16
+
17
+ def asset_path(...)
18
+ vite_asset_path(...)
19
+ end
20
+
21
+ def image_tag(path, alt:, **)
22
+ img(src: asset_path(path), alt:, **)
23
+ end
24
+
25
+ def icon(...)
26
+ render Icon.new(...)
27
+ end
28
+
29
+ def inline_link(text, url)
30
+ render Protos::Typography::InlineLink.new(href: url) { text }
31
+ end
32
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Icon < Component
4
+ param :name, reader: false
5
+ option :variant, reader: false, default: -> {}
6
+ option :size, default: -> { :md }, reader: false
7
+
8
+ def template
9
+ div(**attrs) do
10
+ render Protos::Icon.heroicon(@name, variant:)
11
+ end
12
+ end
13
+
14
+ private
15
+
16
+ def variant
17
+ @variant || {
18
+ xs: :micro,
19
+ sm: :mini,
20
+ md: :solid,
21
+ lg: :solid
22
+ }.fetch(@size)
23
+ end
24
+
25
+ def size
26
+ {
27
+ xs: "w-3 h-3",
28
+ sm: "w-4 h-4",
29
+ md: "w-5 h-5",
30
+ lg: "w-7 h-7"
31
+ }.fetch(@size)
32
+ end
33
+
34
+ def theme
35
+ {
36
+ container: tokens(size, "opacity-90", "inline-block")
37
+ }
38
+ end
39
+ end
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Layout < Component
4
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Page < Component
4
+ # Example of a nested layout
5
+
6
+ def around_template(&block)
7
+ render Layouts::Site.new do |layout|
8
+ layout.with_content(&block)
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ViteHelpers
4
+ def vite_client_tag
5
+ src = vite_manifest.vite_client_src || "/vite-dev/@vite/client"
6
+ script(src:, type: :module)
7
+ end
8
+
9
+ def vite_javascript_tag(
10
+ *names,
11
+ type: :module,
12
+ asset_type: :javascript,
13
+ crossorigin: :anonymous,
14
+ **options
15
+ )
16
+ entries = vite_manifest.resolve_entries(*names, type: asset_type)
17
+ entries.fetch(:scripts).each do |src|
18
+ script(
19
+ src:,
20
+ type:,
21
+ crossorigin:,
22
+ extname: :js,
23
+ **options
24
+ )
25
+ end
26
+ entries.fetch(:stylesheets).each do |href|
27
+ link(href:, rel: :stylesheet, type: "text/css")
28
+ end
29
+ end
30
+
31
+ def vite_manifest
32
+ ViteRuby.instance.manifest
33
+ end
34
+
35
+ def vite_asset_path(name, **)
36
+ vite_manifest.path_for(name, **)
37
+ end
38
+ end
File without changes
@@ -0,0 +1,59 @@
1
+ worker_processes 1;
2
+ error_log stderr;
3
+ pid nginx.pid;
4
+
5
+ events {
6
+ worker_connections 768;
7
+ }
8
+
9
+ http {
10
+ types_hash_max_size 2048;
11
+ include mime.types;
12
+ charset UTF-8;
13
+ gzip on;
14
+ gzip_comp_level 6;
15
+ gzip_min_length 256;
16
+ gzip_types text/plain text/css application/json application/javascript application/xml;
17
+ gzip_proxied any;
18
+ gzip_vary on;
19
+
20
+ server {
21
+ listen 80 default_server;
22
+ listen [::]:80 default_server;
23
+ server_name _;
24
+ root /usr/share/nginx/html;
25
+ index index.html index.htm;
26
+ port_in_redirect off;
27
+ add_header X-Content-Type-Options "nosniff";
28
+
29
+ location / {
30
+ try_files $uri $uri.html =404;
31
+ expires 1h;
32
+ }
33
+
34
+ location ~* \.(?:ico|gif|jpe?g|png|svg|webp)$ {
35
+ expires 31536000s;
36
+ add_header Cache-Control "public, max-age=31536000, immutable";
37
+ }
38
+
39
+ location ~* \.(css|js)$ {
40
+ expires 31536000s;
41
+ add_header Cache-Control "public, max-age=31536000, immutable";
42
+ charset utf-8;
43
+ gzip_static on;
44
+ }
45
+
46
+ location ~* \.woff2$ {
47
+ expires 31536000s;
48
+ add_header Cache-Control "public, max-age=31536000, immutable";
49
+ types { font/woff2 woff2; }
50
+ gzip off;
51
+ add_header Vary Accept-Encoding;
52
+ }
53
+
54
+ location ~* \.webmanifest$ {
55
+ charset off;
56
+ gzip off;
57
+ }
58
+ }
59
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "name": "static-starter",
3
+ "version": "1.0.0",
4
+ "description": "",
5
+ "type": "module",
6
+ "scripts": {
7
+ "test": "echo \"Error: no test specified\" && exit 1",
8
+ "heroku-postbuild": "bin/rake site:build"
9
+ },
10
+ "keywords": [],
11
+ "author": "",
12
+ "license": "ISC",
13
+ "dependencies": {
14
+ "@fontsource-variable/inter": "^5.0.20",
15
+ "@hotwired/stimulus": "^3.2.2",
16
+ "@hotwired/turbo": "^8.0.5",
17
+ "@tailwindcss/typography": "^0.5.14",
18
+ "autoprefixer": "^10.4.20",
19
+ "daisyui": "^4.12.10",
20
+ "protos-stimulus": "^0.0.3",
21
+ "postcss": "^8.4.41",
22
+ "tailwindcss": "^3.4.10",
23
+ "vite": "^5.4.0",
24
+ "vite-plugin-ruby": "^5.0.0",
25
+ "vite-plugin-full-reload": "^1.2.0"
26
+ },
27
+ "optionalDependencies": {
28
+ "@rollup/rollup-linux-arm64-musl": "4.20.0"
29
+ },
30
+ "packageManager": "yarn@1.22.22+sha1.ac34549e6aa8e7ead463a7407e1c7390f61a6610"
31
+ }
@@ -0,0 +1,6 @@
1
+ export default {
2
+ plugins: {
3
+ tailwindcss: {},
4
+ autoprefixer: {},
5
+ },
6
+ }
Binary file
@@ -0,0 +1 @@
1
+ Sitemap: <%= URI.join(url, "sitemap.xml") %>
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": <%= title %>,
3
+ "short_name": <%= title %>,
4
+ "icons": [
5
+ {
6
+ "src":"/android-chrome-192x192.png",
7
+ "sizes":"192x192",
8
+ "type":"image/png"
9
+ },
10
+ {
11
+ "src":"/android-chrome-512x512.png",
12
+ "sizes":"512x512",
13
+ "type":"image/png"
14
+ }
15
+ ],
16
+ "theme_color":"#61afef",
17
+ "background_color":"#1e2227",
18
+ "display":"standalone"
19
+ }
File without changes