diff --git a/assets/css/main.css b/assets/css/main.css index 83f7903..77cf0cf 100644 --- a/assets/css/main.css +++ b/assets/css/main.css @@ -30,6 +30,10 @@ margin-bottom: 2rem; } + .cta-gradient { + background: linear-gradient(calc(var(--gradient-angle) * 1deg), var(--gradient-from), var(--gradient-to)); + } + .btn { @apply inline-flex items-center justify-center px-6 py-3 font-medium transition duration-200 ease-in-out; border-radius: 2rem; @@ -67,4 +71,117 @@ .feature-grid { @apply grid gap-8 md:grid-cols-2 lg:grid-cols-3; } + + /* Blog and Syntax Highlighting Styles */ + .highlight { + @apply text-sm font-mono text-gray-200; + } + + .highlight table { + @apply w-full border-separate border-spacing-0; + } + + .highlight table td { + @apply p-0; + } + + .highlight table td:first-child { + @apply pr-4 text-right select-none text-gray-500 border-r border-gray-700; + } + + .highlight table td:last-child { + @apply pl-4 w-full; + } + + .highlight .k, .highlight .kd { + @apply text-purple-400 font-semibold; + } + + .highlight .nf, .highlight .nx { + @apply text-blue-400; + } + + .highlight .s, .highlight .s1, .highlight .s2 { + @apply text-green-400; + } + + .highlight .mi, .highlight .mf { + @apply text-orange-400; + } + + .highlight .c, .highlight .c1, .highlight .cm { + @apply text-gray-500 italic; + } + + .highlight .o { + @apply text-yellow-400; + } + + .highlight .p { + @apply text-gray-400; + } + + .prose { + @apply max-w-none; + } + + .prose h1, .prose h2, .prose h3, .prose h4 { + @apply font-heading font-bold text-gray-900; + } + + .prose h1 { + @apply text-4xl mb-8; + } + + .prose h2 { + @apply text-3xl mt-12 mb-6; + } + + .prose h3 { + @apply text-2xl mt-8 mb-4; + } + + .prose p { + @apply text-gray-700 leading-relaxed mb-6; + } + + .prose a { + @apply text-primary-600 hover:text-primary-700 no-underline; + } + + .prose ul, .prose ol { + @apply my-6 ml-6; + } + + .prose li { + @apply mb-2; + } + + .prose blockquote { + @apply border-l-4 border-gray-200 pl-4 italic text-gray-700 my-8; + } + + .prose img { + @apply rounded-lg shadow-lg my-8; + } + + .prose code:not(pre code) { + @apply bg-gray-100 text-gray-900 px-1.5 py-0.5 rounded text-sm font-mono; + } + + .table-of-contents { + @apply bg-gray-50 p-6 rounded-lg my-8; + } + + .table-of-contents nav { + @apply space-y-2; + } + + .table-of-contents a { + @apply text-gray-700 hover:text-primary-600 no-underline; + } + + .table-of-contents ul { + @apply list-none ml-4 space-y-2; + } } diff --git a/layouts/_default/list.html b/layouts/_default/list.html new file mode 100644 index 0000000..86cb090 --- /dev/null +++ b/layouts/_default/list.html @@ -0,0 +1,65 @@ +{{ define "main" }} +
+
+ {{ if .IsHome }} +

{{ .Site.Title }}

+ {{ else }} +

{{ .Title }}

+ {{ with .Description }} +
{{ . }}
+ {{ end }} + {{ end }} + +
+ {{ $paginator := .Paginate .Pages }} + {{ range $paginator.Pages }} + {{ partial "post-card.html" . }} + {{ end }} +
+ + {{ $paginator := .Paginate .Pages }} + {{ if gt $paginator.TotalPages 1 }} + + {{ end }} +
+
+{{ end }} diff --git a/layouts/_default/single.html b/layouts/_default/single.html new file mode 100644 index 0000000..e845867 --- /dev/null +++ b/layouts/_default/single.html @@ -0,0 +1,86 @@ +{{ define "main" }} +
+ +
+ +
+
+ {{ with .Params.categories }} +
+ {{ range . }} + + {{ . }} + + {{ end }} +
+ {{ end }} + +

{{ .Title }}

+ + {{ partial "post-meta.html" . }} +
+ + {{ with .Params.featured_image }} +
+ {{ $.Title }} +
+ {{ end }} + +
+ {{ .Content }} +
+
+ + + +
+ + + + + + {{ if and .Site.Params.blog.cta.enable .Site.Params.cta.enable }} +
+ {{ partial "components/cta.html" . }} +
+ {{ end }} +
+{{ end }} diff --git a/layouts/index.html b/layouts/index.html index 89327cd..9983b08 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,6 +1,3 @@ {{ define "main" }} - -{{ if .Content }} - {{ .Content }} -{{ end }} +{{ .Content }} {{ end }} diff --git a/layouts/partials/components/cta.html b/layouts/partials/components/cta.html new file mode 100644 index 0000000..b62bc4e --- /dev/null +++ b/layouts/partials/components/cta.html @@ -0,0 +1,28 @@ +{{ if .Site.Params.cta.enable }} +
+
+ {{ $angle := .Site.Params.cta.gradient_angle | default 45 }} + {{ $from := .Site.Params.cta.gradient_from }} + {{ $to := .Site.Params.cta.gradient_to }} +
+
+

{{ .Site.Params.cta.title }}

+

{{ .Site.Params.cta.description }}

+
+ {{ with .Site.Params.cta.primary_button }} + + {{ .text }} + + {{ end }} + {{ with .Site.Params.cta.secondary_button }} + + {{ .text }} + + {{ end }} +
+
+
+
+
+{{ end }} diff --git a/layouts/partials/components/subscribe-form.html b/layouts/partials/components/subscribe-form.html new file mode 100644 index 0000000..65bd176 --- /dev/null +++ b/layouts/partials/components/subscribe-form.html @@ -0,0 +1,33 @@ +
+

{{ .title | default "Subscribe to Newsletter" }}

+

{{ .description | default "Get the latest posts delivered right to your inbox." }}

+ +
+ {{ with .hidden }} + {{ range $name, $value := . }} + + {{ end }} + {{ end }} + +
+ +
+ + + + {{ with .disclaimer }} +

{{ . }}

+ {{ end }} +
+
diff --git a/layouts/partials/post-card.html b/layouts/partials/post-card.html new file mode 100644 index 0000000..defd8e3 --- /dev/null +++ b/layouts/partials/post-card.html @@ -0,0 +1,80 @@ +
+ {{ with .Params.featured_image }} + + {{ $.Title }} + + {{ end }} + +
+ + {{ with .Params.categories }} +
+ {{ range first 1 . }} + + {{ . }} + + {{ end }} +
+ {{ end }} + + +

+ {{ .Title }} +

+ + +

+ {{ with .Description }} + {{ . }} + {{ else }} + {{ .Summary | truncate 160 }} + {{ end }} +

+ + +
+ {{ with .Params.author }} +
+ + + + {{ . }} +
+ {{ end }} + +
+ + + + +
+
+ + +
+ + Read More + + + + + + + + + + + {{ .ReadingTime }} min + +
+
+
diff --git a/layouts/partials/post-meta.html b/layouts/partials/post-meta.html new file mode 100644 index 0000000..30c9175 --- /dev/null +++ b/layouts/partials/post-meta.html @@ -0,0 +1,45 @@ +
+ + + +
+ {{ with .Params.author }} +
+ + + + {{ . }} +
+ {{ end }} + +
+
+ + + + {{ .ReadingTime }} min read +
+ +
+ + + + +
+
+
+ + + {{ with .Params.tags }} +
+ {{ range . }} + + #{{ . }} + + {{ end }} +
+ {{ end }} +
diff --git a/layouts/partials/sidebar.html b/layouts/partials/sidebar.html new file mode 100644 index 0000000..f2a360d --- /dev/null +++ b/layouts/partials/sidebar.html @@ -0,0 +1,86 @@ +
+ + {{ if .Site.Params.blog.sidebar.subscribe.enable }} + {{ $params := dict + "title" .Site.Params.blog.sidebar.subscribe.title + "description" .Site.Params.blog.sidebar.subscribe.description + "action" .Site.Params.blog.sidebar.subscribe.action + "emailName" .Site.Params.blog.sidebar.subscribe.emailName + "buttonText" .Site.Params.blog.sidebar.subscribe.buttonText + "placeholder" .Site.Params.blog.sidebar.subscribe.placeholder + "disclaimer" .Site.Params.blog.sidebar.subscribe.disclaimer + "hidden" .Site.Params.blog.sidebar.subscribe.hidden + }} + {{ partial "components/subscribe-form" $params }} + {{ end }} + + + {{ if .Site.Params.blog.sidebar.recent.enable }} +
+

{{ .Site.Params.blog.sidebar.recent.title | default "Recent Articles" }}

+
+ {{ $recentCount := .Site.Params.blog.sidebar.recent.count | default 5 }} + {{ range first $recentCount (where .Site.RegularPages "Type" "blog") }} + + {{ end }} +
+
+ {{ end }} + + + {{ if .Site.Params.blog.sidebar.categories.enable }} +
+

{{ .Site.Params.blog.sidebar.categories.title | default "Categories" }}

+
+ {{ range $name, $taxonomy := .Site.Taxonomies.categories }} + + {{ $name }} + ({{ $taxonomy.Count }}) + + {{ end }} +
+
+ {{ end }} + + + {{ if .Site.Params.blog.sidebar.tags.enable }} +
+

{{ .Site.Params.blog.sidebar.tags.title | default "Popular Tags" }}

+
+ {{ $tagCount := .Site.Params.blog.sidebar.tags.count | default 20 }} + {{ range first $tagCount .Site.Taxonomies.tags.ByCount }} + + #{{ .Name }} + ({{ .Count }}) + + {{ end }} +
+
+ {{ end }} +
diff --git a/layouts/shortcodes/code.html b/layouts/shortcodes/code.html new file mode 100644 index 0000000..bdada01 --- /dev/null +++ b/layouts/shortcodes/code.html @@ -0,0 +1,19 @@ +{{ $lang := .Get 0 }} +{{ $code := .Inner }} +{{ $filename := .Get 1 }} + +
+ {{ with $filename }} +
+
{{ . }}
+
+
+
+
+
+
+ {{ end }} +
+ {{ highlight $code $lang "linenos=table,linenostart=1,hl_lines=,lineanchors=line" }} +
+
diff --git a/layouts/shortcodes/cta.html b/layouts/shortcodes/cta.html index 0fd5ebf..9238bc9 100644 --- a/layouts/shortcodes/cta.html +++ b/layouts/shortcodes/cta.html @@ -1,22 +1,17 @@ -{{/* CTA Shortcode */}} -
-
-
- {{ with .Get "background-image" }} -
- {{ end }} -
-

{{ .Get "title" | default "Ready to Transform Your User Experience?" }}

-

{{ .Get "description" | default "Join thousands of companies already using our platform to drive growth." }}

- -
-
-
-
+{{ $params := dict + "title" (.Get "title") + "description" (.Get "description") + "primary_button" (dict + "text" (.Get "primary_button_text") + "url" (.Get "primary_button_url") + ) + "secondary_button" (dict + "text" (.Get "secondary_button_text") + "url" (.Get "secondary_button_url") + ) + "gradient_from" (.Get "gradient-from") + "gradient_to" (.Get "gradient-to") + "gradient_angle" (.Get "gradient-angle") +}} + +{{ partial "components/cta" (dict "Site" .Site "Params" (dict "cta" $params "enable" true)) }} diff --git a/layouts/shortcodes/figure.html b/layouts/shortcodes/figure.html new file mode 100644 index 0000000..d782dd9 --- /dev/null +++ b/layouts/shortcodes/figure.html @@ -0,0 +1,18 @@ +{{ $src := .Get "src" }} +{{ $alt := .Get "alt" }} +{{ $caption := .Get "caption" }} +{{ $class := .Get "class" | default "w-full" }} + +
+ {{ $alt }} + {{ with $caption }} +
+ {{ . | markdownify }} +
+ {{ end }} +
diff --git a/layouts/shortcodes/toc.html b/layouts/shortcodes/toc.html new file mode 100644 index 0000000..1b94a2b --- /dev/null +++ b/layouts/shortcodes/toc.html @@ -0,0 +1,4 @@ +
+

Table of Contents

+ {{ .Page.TableOfContents }} +
diff --git a/layouts/taxonomy/list.html b/layouts/taxonomy/list.html new file mode 100644 index 0000000..e81533f --- /dev/null +++ b/layouts/taxonomy/list.html @@ -0,0 +1,70 @@ +{{ define "main" }} +
+
+
+

+ {{ .Data.Singular | title }}: {{ .Title }} +

+
+ {{ $count := len .Pages }} + {{ if eq $count 1 }} + 1 post + {{ else }} + {{ $count }} posts + {{ end }} +
+
+ +
+ {{ $paginator := .Paginate .Pages }} + {{ range $paginator.Pages }} + {{ partial "post-card.html" . }} + {{ end }} +
+ + {{ $paginator := .Paginate .Pages }} + {{ if gt $paginator.TotalPages 1 }} + + {{ end }} +
+
+{{ end }} diff --git a/layouts/taxonomy/terms.html b/layouts/taxonomy/terms.html new file mode 100644 index 0000000..5fe1654 --- /dev/null +++ b/layouts/taxonomy/terms.html @@ -0,0 +1,39 @@ +{{ define "main" }} +
+
+
+

+ {{ .Title }} +

+
+ Browse all {{ .Data.Plural }} +
+
+ + + + {{ if not .Data.Terms }} +
+ No {{ .Data.Plural }} found +
+ {{ end }} +
+
+{{ end }} diff --git a/static/images/blog/blog-1.jpg b/static/images/blog/blog-1.jpg new file mode 100644 index 0000000..8776392 Binary files /dev/null and b/static/images/blog/blog-1.jpg differ diff --git a/static/images/blog/blog-2.webp b/static/images/blog/blog-2.webp new file mode 100644 index 0000000..18d5bee Binary files /dev/null and b/static/images/blog/blog-2.webp differ diff --git a/static/images/blog/blog-3.webp b/static/images/blog/blog-3.webp new file mode 100644 index 0000000..af244a5 Binary files /dev/null and b/static/images/blog/blog-3.webp differ diff --git a/static/images/blog/blog-4.jpg b/static/images/blog/blog-4.jpg new file mode 100644 index 0000000..326f9c5 Binary files /dev/null and b/static/images/blog/blog-4.jpg differ diff --git a/static/images/blog/blog-5.jpg b/static/images/blog/blog-5.jpg new file mode 100644 index 0000000..6081974 Binary files /dev/null and b/static/images/blog/blog-5.jpg differ