Compare commits

...

5 Commits

33 changed files with 1294 additions and 1332 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ _site/
.sass-cache/
.jekyll-cache/
.jekyll-metadata
.gitattributes

View File

@ -7,7 +7,7 @@ source "https://rubygems.org"
#
# This will help ensure the proper Jekyll version is running.
# Happy Jekylling!
gem "jekyll", "~> 4.0.0"
gem "jekyll", "~> 4.2.2"
# This is the default theme for new Jekyll sites. You may change this to anything you like.
# gem "minima", "~> 2.5"
@ -23,6 +23,7 @@ group :jekyll_plugins do
gem "jekyll-paginate-v2"
gem 'jekyll_picture_tag', '~> 1.6'
gem 'jekyll-strapi'
gem 'jekyll-admin'
end
# Windows and JRuby does not include zoneinfo files, so bundle the tzinfo-data gem

View File

@ -1,53 +1,58 @@
GEM
remote: https://rubygems.org/
specs:
addressable (2.7.0)
addressable (2.8.0)
public_suffix (>= 2.0.2, < 5.0)
backports (3.23.0)
colorator (1.1.0)
concurrent-ruby (1.1.7)
concurrent-ruby (1.1.10)
domain_name (0.5.20190701)
unf (>= 0.0.5, < 1.0.0)
em-websocket (0.5.2)
em-websocket (0.5.3)
eventmachine (>= 0.12.9)
http_parser.rb (~> 0.6.0)
http_parser.rb (~> 0)
eventmachine (1.2.7)
ffi (1.13.1)
ffi (1.15.5)
forwardable-extended (2.6.0)
http (3.3.0)
addressable (~> 2.3)
http-cookie (~> 1.0)
http-form_data (~> 2.0)
http_parser.rb (~> 0.6.0)
http-cookie (1.0.3)
http-cookie (1.0.4)
domain_name (~> 0.5)
http-form_data (2.3.0)
http_parser.rb (0.6.0)
i18n (1.8.5)
i18n (1.10.0)
concurrent-ruby (~> 1.0)
jekyll (4.0.1)
jekyll (4.2.2)
addressable (~> 2.4)
colorator (~> 1.0)
em-websocket (~> 0.5)
i18n (>= 0.9.5, < 2)
i18n (~> 1.0)
jekyll-sass-converter (~> 2.0)
jekyll-watch (~> 2.0)
kramdown (~> 2.1)
kramdown (~> 2.3)
kramdown-parser-gfm (~> 1.0)
liquid (~> 4.0)
mercenary (~> 0.3.3)
mercenary (~> 0.4.0)
pathutil (~> 0.9)
rouge (~> 3.0)
safe_yaml (~> 1.0)
terminal-table (~> 1.8)
terminal-table (~> 2.0)
jekyll-admin (0.11.0)
jekyll (>= 3.7, < 5.0)
sinatra (~> 1.4)
sinatra-contrib (~> 1.4)
jekyll-archives (2.2.1)
jekyll (>= 3.6, < 5.0)
jekyll-feed (0.15.1)
jekyll-feed (0.16.0)
jekyll (>= 3.7, < 5.0)
jekyll-menus (0.6.1)
jekyll (>= 3.6, < 5.0)
jekyll-paginate-v2 (3.0.0)
jekyll (>= 3.0, < 5.0)
jekyll-sass-converter (2.1.0)
jekyll-sass-converter (2.2.0)
sassc (> 2.0.1, < 3.0)
jekyll-strapi (0.1.3)
http (~> 3.2)
@ -57,57 +62,76 @@ GEM
nuggets
jekyll-watch (2.2.1)
listen (~> 3.0)
jekyll_picture_tag (1.12.0)
jekyll_picture_tag (1.14.0)
addressable (~> 2.6)
jekyll (< 5)
mime-types (~> 3)
mini_magick (~> 4)
objective_elements (~> 1.1.2)
json (2.5.1)
kramdown (2.3.0)
mime-types (~> 3.0)
mini_magick (~> 4.0)
objective_elements (~> 1.1)
json (2.6.1)
kramdown (2.4.0)
rexml
kramdown-parser-gfm (1.1.0)
kramdown (~> 2.0)
liquid (4.0.3)
listen (3.3.1)
listen (3.7.1)
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.3.6)
mime-types (3.3.1)
mercenary (0.4.0)
mime-types (3.4.1)
mime-types-data (~> 3.2015)
mime-types-data (3.2020.1104)
mime-types-data (3.2022.0105)
mini_magick (4.11.0)
multi_json (1.15.0)
nuggets (1.6.0)
objective_elements (1.1.2)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
public_suffix (4.0.6)
rb-fsevent (0.10.4)
public_suffix (4.0.7)
rack (1.6.13)
rack-protection (1.5.5)
rack
rack-test (1.1.0)
rack (>= 1.0, < 3)
rb-fsevent (0.11.1)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.4)
rouge (3.25.0)
rexml (3.2.5)
rouge (3.28.0)
safe_yaml (1.0.5)
sassc (2.4.0)
ffi (~> 1.9)
terminal-table (1.8.0)
sinatra (1.4.8)
rack (~> 1.5)
rack-protection (~> 1.4)
tilt (>= 1.3, < 3)
sinatra-contrib (1.4.7)
backports (>= 2.0)
multi_json
rack-protection
rack-test
sinatra (~> 1.4.0)
tilt (>= 1.3, < 3)
terminal-table (2.0.0)
unicode-display_width (~> 1.1, >= 1.1.1)
thread_safe (0.3.6)
tzinfo (1.2.8)
tilt (2.0.10)
tzinfo (1.2.9)
thread_safe (~> 0.1)
tzinfo-data (1.2020.4)
tzinfo-data (1.2022.1)
tzinfo (>= 1.0.0)
unf (0.1.4)
unf_ext
unf_ext (0.0.7.7)
unicode-display_width (1.7.0)
unf_ext (0.0.8.1)
unicode-display_width (1.8.0)
wdm (0.1.1)
PLATFORMS
ruby
x86_64-linux-musl
DEPENDENCIES
jekyll (~> 4.0.0)
jekyll (~> 4.2.2)
jekyll-admin
jekyll-archives
jekyll-feed (~> 0.12)
jekyll-menus
@ -120,4 +144,4 @@ DEPENDENCIES
wdm (~> 0.1.1)
BUNDLED WITH
2.1.4
2.2.24

View File

@ -37,8 +37,8 @@ No proprietary operating system dependencies required, only Docker Engine super
*All Ruby dependencies are created and stored in the Docker container. Simple, smooth and sweet :)*
# API's
* Siteleaf CMS
* Staticman with GitHub
* Strapi CMS, Jekyll-Admin CMS
* ISSO (Comments)
* Snipcart with Stripe
* Mailjet Newsletters
* Algolia Search

View File

@ -20,6 +20,7 @@
baseurl: "/" # the subpath of your site, e.g. /blog /galacticsociety.github.io
url: "https://sharpetronics.github.io" # the base hostname & protocol for your site, e.g. https://sharpetronics.github.io
source: .
#Latent Semantic Indexing for similarity bewtween documents.
lsi: true
@ -67,6 +68,7 @@ picture:
# Build settings
plugins:
- jekyll-feed #manually generated rss.xml https://jekyllrb.com/tutorials/convert-site-to-jekyll/#10-rss-feed
- jekyll-admin
- jekyll-strapi
- jekyll-menus
- jekyll-archives

View File

@ -0,0 +1,6 @@
#Product list for all items for SharpeTronics
global-product:
tax: 6%
shipping: $5.00
delivery: 3-5 days
warranty: 30 days money back

View File

@ -1,166 +0,0 @@
#Product list for all items for SharpeTronics
global-product:
tax: 6%
shipping: $5.00
delivery: 3-5 days
warranty: 30 days money back
product-ten:
title: Peppermint Lip Balm
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
id: 201806
sku: 2020
quantity: 14
price: $5.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in
product-one:
title: Peppermint Lip Balm
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
id: 201806
sku: 2020
quantity: 14
price: $5.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in
product-nine:
title: Peppermint Lip Balm
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
id: 201806
sku: 2020
quantity: 14
price: $5.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in
product-two:
title: Peppermint Lip Balm
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
id: 201806
sku: 2020
quantity: 14
price: $5.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in
product-three:
title: Peppermint Lip Balm
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
id: 201806
sku: 2020
quantity: 14
price: $5.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in
product-four:
title: Peppermint Lip Balm
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
id: 201806
sku: 2020
quantity: 14
price: $5.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in
product-five:
title: Peppermint Lip Balm
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
id: 201806
sku: 2020
quantity: 14
price: $5.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in
product-six:
title: Peppermint Lip Balm
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
id: 201806
sku: 2020
quantity: 14
price: $5.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in
product-seven:
title: Peppermint Lip Balm
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
id: 201806
sku: 2020
quantity: 14
price: $5.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in
product-eight:
title: Peppermint Lip Balm
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
id: 201806
sku: 2020
quantity: 14
price: $5.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in

View File

@ -0,0 +1,15 @@
title: Cup
url: /products/2020-06-03-cup/
id: 201806
sku: 202055478373
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
quantity: 14
price: 125.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in

15
_data/products/sample.yml Normal file
View File

@ -0,0 +1,15 @@
title: Dragon
url: /products/2017-02-03-dragon/
id: 201806
sku: 202055478373
image: assets/images/Peppermint-Lip-Balm.jpg
description: Our all natural Peppermint lip balm was a great hit with our family & friends. We hope you enjoy it too!
excerpt: Our BEST SELLING lip balm - you'll love it!
category: Lip Balm
tag: Health
quantity: 14
price: 5.00
weight: Peppermint
format: Physical
material: Wood, Steel
dimension: 15in x 35in

View File

@ -10,7 +10,7 @@
<p class="copyright">
&copy; 2020 SharpeTronics <a href="{{ site.data.global.creator_link }}" target="_blank"></a><br />
<a href="/humans.txt" target="_blank">Imagined by humans</a>, <a href="https://jekyllrb.com/" target="_blank">built with Jekyll</a>,
<a href="https://github.com/" target="_blank">hosted by GitHub</a><br />
<a href="https://git.sharpetronics.com/SharpeTronics/sharpetronics" target="_blank">hosted by SharpeTronics</a><br />
<!-- Creative Commons Attribution-NoDerivs 3.0 United States License -->
This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.
</p>

View File

@ -1,70 +1,70 @@
// Reset.
// Based on meyerweb.com/eric/tools/css/reset (v2.0 | 20110126 | License: public domain)
html, body, div, span, applet, object,
iframe, h1, h2, h3, h4, h5, h6, p, blockquote,
pre, a, abbr, acronym, address, big, cite,
code, del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var, b,
u, i, center, dl, dt, dd, ol, ul, li, fieldset,
form, label, legend, table, caption, tbody,
tfoot, thead, tr, th, td, article, aside,
canvas, details, embed, figure, figcaption,
footer, header, hgroup, menu, nav, output, ruby,
section, summary, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
&:before,
&:after {
content: '';
content: none;
}
}
table {
border-collapse: collapse;
border-spacing: 0;
}
body {
-webkit-text-size-adjust: none;
}
mark {
background-color: transparent;
color: inherit;
}
input::-moz-focus-inner {
border: 0;
padding: 0;
}
input, select, textarea {
-moz-appearance: none;
-webkit-appearance: none;
-ms-appearance: none;
appearance: none;
}
// Reset.
// Based on meyerweb.com/eric/tools/css/reset (v2.0 | 20110126 | License: public domain)
html, body, div, span, applet, object,
iframe, h1, h2, h3, h4, h5, h6, p, blockquote,
pre, a, abbr, acronym, address, big, cite,
code, del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var, b,
u, i, center, dl, dt, dd, ol, ul, li, fieldset,
form, label, legend, table, caption, tbody,
tfoot, thead, tr, th, td, article, aside,
canvas, details, embed, figure, figcaption,
footer, header, hgroup, menu, nav, output, ruby,
section, summary, time, mark, audio, video {
margin: 0;
padding: 0;
border: 0;
font-size: 100%;
font: inherit;
vertical-align: baseline;
}
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
display: block;
}
body {
line-height: 1;
}
ol, ul {
list-style: none;
}
blockquote, q {
quotes: none;
&:before,
&:after {
content: '';
content: none;
}
}
table {
border-collapse: collapse;
border-spacing: 0;
}
body {
-webkit-text-size-adjust: none;
}
mark {
background-color: transparent;
color: inherit;
}
input::-moz-focus-inner {
border: 0;
padding: 0;
}
input, select, textarea {
-moz-appearance: none;
-webkit-appearance: none;
-ms-appearance: none;
appearance: none;
}

View File

@ -1,95 +1,95 @@
/* Actions */
ul.actions {
@include vendor('display', 'flex');
cursor: default;
list-style: none;
margin-left: (_size(element-margin) * -0.5);
padding-left: 0;
li {
padding: 0 0 0 (_size(element-margin) * 0.5);
vertical-align: middle;
}
&.special {
@include vendor('justify-content', 'center');
width: 100%;
margin-left: 0;
li {
&:first-child {
padding-left: 0;
}
}
}
&.stacked {
@include vendor('flex-direction', 'column');
margin-left: 0;
li {
padding: (_size(element-margin) * 0.65) 0 0 0;
&:first-child {
padding-top: 0;
}
}
}
&.fit {
width: calc(100% + #{_size(element-margin) * 0.5});
li {
@include vendor('flex-grow', '1');
@include vendor('flex-shrink', '1');
width: 100%;
> * {
width: 100%;
}
}
&.stacked {
width: 100%;
}
}
@include breakpoint('<=xsmall') {
&:not(.fixed) {
@include vendor('flex-direction', 'column');
margin-left: 0;
width: 100% !important;
li {
@include vendor('flex-grow', '1');
@include vendor('flex-shrink', '1');
padding: (_size(element-margin) * 0.5) 0 0 0;
text-align: center;
width: 100%;
> * {
width: 100%;
}
&:first-child {
padding-top: 0;
}
input[type="submit"],
input[type="reset"],
input[type="button"],
button,
.button {
width: 100%;
&.icon {
&:before {
margin-left: -0.5em;
}
}
}
}
}
}
}
/* Actions */
ul.actions {
@include vendor('display', 'flex');
cursor: default;
list-style: none;
margin-left: (_size(element-margin) * -0.5);
padding-left: 0;
li {
padding: 0 0 0 (_size(element-margin) * 0.5);
vertical-align: middle;
}
&.special {
@include vendor('justify-content', 'center');
width: 100%;
margin-left: 0;
li {
&:first-child {
padding-left: 0;
}
}
}
&.stacked {
@include vendor('flex-direction', 'column');
margin-left: 0;
li {
padding: (_size(element-margin) * 0.65) 0 0 0;
&:first-child {
padding-top: 0;
}
}
}
&.fit {
width: calc(100% + #{_size(element-margin) * 0.5});
li {
@include vendor('flex-grow', '1');
@include vendor('flex-shrink', '1');
width: 100%;
> * {
width: 100%;
}
}
&.stacked {
width: 100%;
}
}
@include breakpoint('<=xsmall') {
&:not(.fixed) {
@include vendor('flex-direction', 'column');
margin-left: 0;
width: 100% !important;
li {
@include vendor('flex-grow', '1');
@include vendor('flex-shrink', '1');
padding: (_size(element-margin) * 0.5) 0 0 0;
text-align: center;
width: 100%;
> * {
width: 100%;
}
&:first-child {
padding-top: 0;
}
input[type="submit"],
input[type="reset"],
input[type="button"],
button,
.button {
width: 100%;
&.icon {
&:before {
margin-left: -0.5em;
}
}
}
}
}
}
}

View File

@ -1,25 +1,25 @@
/* Row */
.row {
@include html-grid(2em);
@include breakpoint('<=xlarge') {
@include html-grid(2em, 'xlarge');
}
@include breakpoint('<=large') {
@include html-grid(1.5em, 'large');
}
@include breakpoint('<=medium') {
@include html-grid(1.5em, 'medium');
}
@include breakpoint('<=small') {
@include html-grid(1.25em, 'small');
}
@include breakpoint('<=xsmall') {
@include html-grid(1.25em, 'xsmall');
}
}
/* Row */
.row {
@include html-grid(2em);
@include breakpoint('<=xlarge') {
@include html-grid(2em, 'xlarge');
}
@include breakpoint('<=large') {
@include html-grid(1.5em, 'large');
}
@include breakpoint('<=medium') {
@include html-grid(1.5em, 'medium');
}
@include breakpoint('<=small') {
@include html-grid(1.25em, 'small');
}
@include breakpoint('<=xsmall') {
@include html-grid(1.25em, 'xsmall');
}
}

View File

@ -1,90 +1,90 @@
/// Removes a specific item from a list.
/// @author Hugo Giraudel
/// @param {list} $list List.
/// @param {integer} $index Index.
/// @return {list} Updated list.
@function remove-nth($list, $index) {
$result: null;
@if type-of($index) != number {
@warn "$index: #{quote($index)} is not a number for `remove-nth`.";
}
@else if $index == 0 {
@warn "List index 0 must be a non-zero integer for `remove-nth`.";
}
@else if abs($index) > length($list) {
@warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.";
}
@else {
$result: ();
$index: if($index < 0, length($list) + $index + 1, $index);
@for $i from 1 through length($list) {
@if $i != $index {
$result: append($result, nth($list, $i));
}
}
}
@return $result;
}
/// Gets a value from a map.
/// @author Hugo Giraudel
/// @param {map} $map Map.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function val($map, $keys...) {
@if nth($keys, 1) == null {
$keys: remove-nth($keys, 1);
}
@each $key in $keys {
$map: map-get($map, $key);
}
@return $map;
}
/// Gets a duration value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _duration($keys...) {
@return val($duration, $keys...);
}
/// Gets a font value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _font($keys...) {
@return val($font, $keys...);
}
/// Gets a misc value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _misc($keys...) {
@return val($misc, $keys...);
}
/// Gets a palette value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _palette($keys...) {
@return val($palette, $keys...);
}
/// Gets a size value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _size($keys...) {
@return val($size, $keys...);
/// Removes a specific item from a list.
/// @author Hugo Giraudel
/// @param {list} $list List.
/// @param {integer} $index Index.
/// @return {list} Updated list.
@function remove-nth($list, $index) {
$result: null;
@if type-of($index) != number {
@warn "$index: #{quote($index)} is not a number for `remove-nth`.";
}
@else if $index == 0 {
@warn "List index 0 must be a non-zero integer for `remove-nth`.";
}
@else if abs($index) > length($list) {
@warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.";
}
@else {
$result: ();
$index: if($index < 0, length($list) + $index + 1, $index);
@for $i from 1 through length($list) {
@if $i != $index {
$result: append($result, nth($list, $i));
}
}
}
@return $result;
}
/// Gets a value from a map.
/// @author Hugo Giraudel
/// @param {map} $map Map.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function val($map, $keys...) {
@if nth($keys, 1) == null {
$keys: remove-nth($keys, 1);
}
@each $key in $keys {
$map: map-get($map, $key);
}
@return $map;
}
/// Gets a duration value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _duration($keys...) {
@return val($duration, $keys...);
}
/// Gets a font value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _font($keys...) {
@return val($font, $keys...);
}
/// Gets a misc value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _misc($keys...) {
@return val($misc, $keys...);
}
/// Gets a palette value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _palette($keys...) {
@return val($palette, $keys...);
}
/// Gets a size value.
/// @param {string} $keys Key(s).
/// @return {string} Value.
@function _size($keys...) {
@return val($size, $keys...);
}

View File

@ -1,149 +1,149 @@
// html-grid.scss v1.0 | @ajlkn | MIT licensed */
// Mixins.
/// Initializes the current element as an HTML grid.
/// @param {mixed} $gutters Gutters (either a single number to set both column/row gutters, or a list to set them individually).
/// @param {mixed} $suffix Column class suffix (optional; either a single suffix or a list).
@mixin html-grid($gutters: 1.5em, $suffix: '') {
// Initialize.
$cols: 12;
$multipliers: 0, 0.25, 0.5, 1, 1.50, 2.00;
$unit: 100% / $cols;
// Suffixes.
$suffixes: null;
@if (type-of($suffix) == 'list') {
$suffixes: $suffix;
}
@else {
$suffixes: ($suffix);
}
// Gutters.
$guttersCols: null;
$guttersRows: null;
@if (type-of($gutters) == 'list') {
$guttersCols: nth($gutters, 1);
$guttersRows: nth($gutters, 2);
}
@else {
$guttersCols: $gutters;
$guttersRows: 0;
}
// Row.
display: flex;
flex-wrap: wrap;
box-sizing: border-box;
align-items: stretch;
// Columns.
> * {
box-sizing: border-box;
}
// Gutters.
&.gtr-uniform {
> * {
> :last-child {
margin-bottom: 0;
}
}
}
// Alignment.
&.aln-left {
justify-content: flex-start;
}
&.aln-center {
justify-content: center;
}
&.aln-right {
justify-content: flex-end;
}
&.aln-top {
align-items: flex-start;
}
&.aln-middle {
align-items: center;
}
&.aln-bottom {
align-items: flex-end;
}
// Step through suffixes.
@each $suffix in $suffixes {
// Suffix.
@if ($suffix != '') {
$suffix: '-' + $suffix;
}
@else {
$suffix: '';
}
// Row.
// Important.
> .imp#{$suffix} {
order: -1;
}
// Columns, offsets.
@for $i from 1 through $cols {
> .col-#{$i}#{$suffix} {
width: $unit * $i;
}
> .off-#{$i}#{$suffix} {
margin-left: $unit * $i;
}
}
// Step through multipliers.
@each $multiplier in $multipliers {
// Gutters.
$class: null;
@if ($multiplier != 1) {
$class: '.gtr-' + ($multiplier * 100);
}
&#{$class} {
margin-top: ($guttersRows * $multiplier * -1);
margin-left: ($guttersCols * $multiplier * -1);
> * {
padding: ($guttersRows * $multiplier) 0 0 ($guttersCols * $multiplier);
}
// Uniform.
&.gtr-uniform {
margin-top: $guttersCols * $multiplier * -1;
> * {
padding-top: $guttersCols * $multiplier;
}
}
}
}
}
}
// html-grid.scss v1.0 | @ajlkn | MIT licensed */
// Mixins.
/// Initializes the current element as an HTML grid.
/// @param {mixed} $gutters Gutters (either a single number to set both column/row gutters, or a list to set them individually).
/// @param {mixed} $suffix Column class suffix (optional; either a single suffix or a list).
@mixin html-grid($gutters: 1.5em, $suffix: '') {
// Initialize.
$cols: 12;
$multipliers: 0, 0.25, 0.5, 1, 1.50, 2.00;
$unit: 100% / $cols;
// Suffixes.
$suffixes: null;
@if (type-of($suffix) == 'list') {
$suffixes: $suffix;
}
@else {
$suffixes: ($suffix);
}
// Gutters.
$guttersCols: null;
$guttersRows: null;
@if (type-of($gutters) == 'list') {
$guttersCols: nth($gutters, 1);
$guttersRows: nth($gutters, 2);
}
@else {
$guttersCols: $gutters;
$guttersRows: 0;
}
// Row.
display: flex;
flex-wrap: wrap;
box-sizing: border-box;
align-items: stretch;
// Columns.
> * {
box-sizing: border-box;
}
// Gutters.
&.gtr-uniform {
> * {
> :last-child {
margin-bottom: 0;
}
}
}
// Alignment.
&.aln-left {
justify-content: flex-start;
}
&.aln-center {
justify-content: center;
}
&.aln-right {
justify-content: flex-end;
}
&.aln-top {
align-items: flex-start;
}
&.aln-middle {
align-items: center;
}
&.aln-bottom {
align-items: flex-end;
}
// Step through suffixes.
@each $suffix in $suffixes {
// Suffix.
@if ($suffix != '') {
$suffix: '-' + $suffix;
}
@else {
$suffix: '';
}
// Row.
// Important.
> .imp#{$suffix} {
order: -1;
}
// Columns, offsets.
@for $i from 1 through $cols {
> .col-#{$i}#{$suffix} {
width: $unit * $i;
}
> .off-#{$i}#{$suffix} {
margin-left: $unit * $i;
}
}
// Step through multipliers.
@each $multiplier in $multipliers {
// Gutters.
$class: null;
@if ($multiplier != 1) {
$class: '.gtr-' + ($multiplier * 100);
}
&#{$class} {
margin-top: ($guttersRows * $multiplier * -1);
margin-left: ($guttersCols * $multiplier * -1);
> * {
padding: ($guttersRows * $multiplier) 0 0 ($guttersCols * $multiplier);
}
// Uniform.
&.gtr-uniform {
margin-top: $guttersCols * $multiplier * -1;
> * {
padding-top: $guttersCols * $multiplier;
}
}
}
}
}
}

View File

@ -1,78 +1,78 @@
/// Makes an element's :before pseudoelement a FontAwesome icon.
/// @param {string} $content Optional content value to use.
/// @param {string} $category Optional category to use.
/// @param {string} $where Optional pseudoelement to target (before or after).
@mixin icon($content: false, $category: regular, $where: before) {
text-decoration: none;
&:#{$where} {
@if $content {
content: $content;
}
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: inline-block;
font-style: normal;
font-variant: normal;
text-rendering: auto;
line-height: 1;
text-transform: none !important;
@if ($category == brands) {
font-family: 'Font Awesome 5 Brands';
}
@elseif ($category == solid) {
font-family: 'Font Awesome 5 Free';
font-weight: 900;
}
@else {
font-family: 'Font Awesome 5 Free';
font-weight: 400;
}
}
}
/// Applies padding to an element, taking the current element-margin value into account.
/// @param {mixed} $tb Top/bottom padding.
/// @param {mixed} $lr Left/right padding.
/// @param {list} $pad Optional extra padding (in the following order top, right, bottom, left)
/// @param {bool} $important If true, adds !important.
@mixin padding($tb, $lr, $pad: (0,0,0,0), $important: null) {
@if $important {
$important: '!important';
}
$x: 0.1em;
@if unit(_size(element-margin)) == 'rem' {
$x: 0.1rem;
}
padding: ($tb + nth($pad,1)) ($lr + nth($pad,2)) max($x, $tb - _size(element-margin) + nth($pad,3)) ($lr + nth($pad,4)) #{$important};
}
/// Encodes a SVG data URL so IE doesn't choke (via codepen.io/jakob-e/pen/YXXBrp).
/// @param {string} $svg SVG data URL.
/// @return {string} Encoded SVG data URL.
@function svg-url($svg) {
$svg: str-replace($svg, '"', '\'');
$svg: str-replace($svg, '%', '%25');
$svg: str-replace($svg, '<', '%3C');
$svg: str-replace($svg, '>', '%3E');
$svg: str-replace($svg, '&', '%26');
$svg: str-replace($svg, '#', '%23');
$svg: str-replace($svg, '{', '%7B');
$svg: str-replace($svg, '}', '%7D');
$svg: str-replace($svg, ';', '%3B');
@return url("data:image/svg+xml;charset=utf8,#{$svg}");
/// Makes an element's :before pseudoelement a FontAwesome icon.
/// @param {string} $content Optional content value to use.
/// @param {string} $category Optional category to use.
/// @param {string} $where Optional pseudoelement to target (before or after).
@mixin icon($content: false, $category: regular, $where: before) {
text-decoration: none;
&:#{$where} {
@if $content {
content: $content;
}
-moz-osx-font-smoothing: grayscale;
-webkit-font-smoothing: antialiased;
display: inline-block;
font-style: normal;
font-variant: normal;
text-rendering: auto;
line-height: 1;
text-transform: none !important;
@if ($category == brands) {
font-family: 'Font Awesome 5 Brands';
}
@elseif ($category == solid) {
font-family: 'Font Awesome 5 Free';
font-weight: 900;
}
@else {
font-family: 'Font Awesome 5 Free';
font-weight: 400;
}
}
}
/// Applies padding to an element, taking the current element-margin value into account.
/// @param {mixed} $tb Top/bottom padding.
/// @param {mixed} $lr Left/right padding.
/// @param {list} $pad Optional extra padding (in the following order top, right, bottom, left)
/// @param {bool} $important If true, adds !important.
@mixin padding($tb, $lr, $pad: (0,0,0,0), $important: null) {
@if $important {
$important: '!important';
}
$x: 0.1em;
@if unit(_size(element-margin)) == 'rem' {
$x: 0.1rem;
}
padding: ($tb + nth($pad,1)) ($lr + nth($pad,2)) max($x, $tb - _size(element-margin) + nth($pad,3)) ($lr + nth($pad,4)) #{$important};
}
/// Encodes a SVG data URL so IE doesn't choke (via codepen.io/jakob-e/pen/YXXBrp).
/// @param {string} $svg SVG data URL.
/// @return {string} Encoded SVG data URL.
@function svg-url($svg) {
$svg: str-replace($svg, '"', '\'');
$svg: str-replace($svg, '%', '%25');
$svg: str-replace($svg, '<', '%3C');
$svg: str-replace($svg, '>', '%3E');
$svg: str-replace($svg, '&', '%26');
$svg: str-replace($svg, '#', '%23');
$svg: str-replace($svg, '{', '%7B');
$svg: str-replace($svg, '}', '%7D');
$svg: str-replace($svg, ';', '%3B');
@return url("data:image/svg+xml;charset=utf8,#{$svg}");
}

13
api/pages.json Normal file
View File

@ -0,0 +1,13 @@
---
layout: none
permalink: /api/pages/
---
[
{%- for page in site.pages %}
{
"title": {{- page.title | jsonify }},
"url": {{- page.url | jsonify }}
}
{% unless forloop.last %},{% endunless %}
{% endfor -%}
]

22
api/posts.json Normal file
View File

@ -0,0 +1,22 @@
---
layout: none
permalink: /api/posts/
---
[
{%- for post in site.posts %}
{
"id": {{- post.id | jsonify -}},
"url": {{- post.url | jsonify }},
"image": {{- post.banner_image | jsonify -}},
"image-alt": {{- post.banner_image_alt | jsonify -}},
"sub_heading":{{- post.sub_heading | jsonify -}},
"title": {{- post.title | jsonify }},
"author": {{- post.author | jsonify }},
"date": {{- post.date | jsonify }},
"tags": {{- post.tags | jsonify }},
"categories": {{- post.categories | jsonify }},
"content": {{- post.content | jsonify }}
}
{% unless forloop.last %},{% endunless %}
{% endfor -%}
]

15
api/products.json Normal file
View File

@ -0,0 +1,15 @@
---
layout: none
permalink: /api/products/
---
[
{%- for product_hash in site.data.products %}
{% assign product = product_hash[1] %}
{
"title": {{- product.title | jsonify }},
"url": {{- product.url | jsonify }},
"price": {{- product.price | jsonify }}
}
{% unless forloop.last %},{% endunless %}
{% endfor -%}
]

View File

@ -1,2 +1,2 @@
/* breakpoints.js v1.0 | @ajlkn | MIT licensed */
/* breakpoints.js v1.0 | @ajlkn | MIT licensed */
var breakpoints=function(){"use strict";function e(e){t.init(e)}var t={list:null,media:{},events:[],init:function(e){t.list=e,window.addEventListener("resize",t.poll),window.addEventListener("orientationchange",t.poll),window.addEventListener("load",t.poll),window.addEventListener("fullscreenchange",t.poll)},active:function(e){var n,a,s,i,r,d,c;if(!(e in t.media)){if(">="==e.substr(0,2)?(a="gte",n=e.substr(2)):"<="==e.substr(0,2)?(a="lte",n=e.substr(2)):">"==e.substr(0,1)?(a="gt",n=e.substr(1)):"<"==e.substr(0,1)?(a="lt",n=e.substr(1)):"!"==e.substr(0,1)?(a="not",n=e.substr(1)):(a="eq",n=e),n&&n in t.list)if(i=t.list[n],Array.isArray(i)){if(r=parseInt(i[0]),d=parseInt(i[1]),isNaN(r)){if(isNaN(d))return;c=i[1].substr(String(d).length)}else c=i[0].substr(String(r).length);if(isNaN(r))switch(a){case"gte":s="screen";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: -1px)";break;case"not":s="screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (max-width: "+d+c+")"}else if(isNaN(d))switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen";break;case"gt":s="screen and (max-width: -1px)";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+")";break;default:s="screen and (min-width: "+r+c+")"}else switch(a){case"gte":s="screen and (min-width: "+r+c+")";break;case"lte":s="screen and (max-width: "+d+c+")";break;case"gt":s="screen and (min-width: "+(d+1)+c+")";break;case"lt":s="screen and (max-width: "+(r-1)+c+")";break;case"not":s="screen and (max-width: "+(r-1)+c+"), screen and (min-width: "+(d+1)+c+")";break;default:s="screen and (min-width: "+r+c+") and (max-width: "+d+c+")"}}else s="("==i.charAt(0)?"screen and "+i:i;t.media[e]=!!s&&s}return t.media[e]!==!1&&window.matchMedia(t.media[e]).matches},on:function(e,n){t.events.push({query:e,handler:n,state:!1}),t.active(e)&&n()},poll:function(){var e,n;for(e=0;e<t.events.length;e++)n=t.events[e],t.active(n.query)?n.state||(n.state=!0,n.handler()):n.state&&(n.state=!1)}};return e._=t,e.on=function(e,n){t.on(e,n)},e.active=function(e){return t.active(e)},e}();!function(e,t){"function"==typeof define&&define.amd?define([],t):"object"==typeof exports?module.exports=t():e.breakpoints=t()}(this,function(){return breakpoints});

View File

@ -1,2 +1,2 @@
/* browser.js v1.0 | @ajlkn | MIT licensed */
/* browser.js v1.0 | @ajlkn | MIT licensed */
var browser=function(){"use strict";var e={name:null,version:null,os:null,osVersion:null,touch:null,mobile:null,_canUse:null,canUse:function(n){e._canUse||(e._canUse=document.createElement("div"));var o=e._canUse.style,r=n.charAt(0).toUpperCase()+n.slice(1);return n in o||"Moz"+r in o||"Webkit"+r in o||"O"+r in o||"ms"+r in o},init:function(){var n,o,r,i,t=navigator.userAgent;for(n="other",o=0,r=[["firefox",/Firefox\/([0-9\.]+)/],["bb",/BlackBerry.+Version\/([0-9\.]+)/],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/],["opera",/OPR\/([0-9\.]+)/],["opera",/Opera\/([0-9\.]+)/],["edge",/Edge\/([0-9\.]+)/],["safari",/Version\/([0-9\.]+).+Safari/],["chrome",/Chrome\/([0-9\.]+)/],["ie",/MSIE ([0-9]+)/],["ie",/Trident\/.+rv:([0-9]+)/]],i=0;i<r.length;i++)if(t.match(r[i][1])){n=r[i][0],o=parseFloat(RegExp.$1);break}for(e.name=n,e.version=o,n="other",o=0,r=[["ios",/([0-9_]+) like Mac OS X/,function(e){return e.replace("_",".").replace("_","")}],["ios",/CPU like Mac OS X/,function(e){return 0}],["wp",/Windows Phone ([0-9\.]+)/,null],["android",/Android ([0-9\.]+)/,null],["mac",/Macintosh.+Mac OS X ([0-9_]+)/,function(e){return e.replace("_",".").replace("_","")}],["windows",/Windows NT ([0-9\.]+)/,null],["bb",/BlackBerry.+Version\/([0-9\.]+)/,null],["bb",/BB[0-9]+.+Version\/([0-9\.]+)/,null],["linux",/Linux/,null],["bsd",/BSD/,null],["unix",/X11/,null]],i=0;i<r.length;i++)if(t.match(r[i][1])){n=r[i][0],o=parseFloat(r[i][2]?r[i][2](RegExp.$1):RegExp.$1);break}e.os=n,e.osVersion=o,e.touch="wp"==e.os?navigator.msMaxTouchPoints>0:!!("ontouchstart"in window),e.mobile="wp"==e.os||"android"==e.os||"ios"==e.os||"bb"==e.os}};return e.init(),e}();!function(e,n){"function"==typeof define&&define.amd?define([],n):"object"==typeof exports?module.exports=n():e.browser=n()}(this,function(){return browser});

View File

@ -1,2 +1,2 @@
/* jquery.scrollex v0.2.1 | (c) @ajlkn | github.com/ajlkn/jquery.scrollex | MIT licensed */
/* jquery.scrollex v0.2.1 | (c) @ajlkn | github.com/ajlkn/jquery.scrollex | MIT licensed */
!function(t){function e(t,e,n){return"string"==typeof t&&("%"==t.slice(-1)?t=parseInt(t.substring(0,t.length-1))/100*e:"vh"==t.slice(-2)?t=parseInt(t.substring(0,t.length-2))/100*n:"px"==t.slice(-2)&&(t=parseInt(t.substring(0,t.length-2)))),t}var n=t(window),i=1,o={};n.on("scroll",function(){var e=n.scrollTop();t.map(o,function(t){window.clearTimeout(t.timeoutId),t.timeoutId=window.setTimeout(function(){t.handler(e)},t.options.delay)})}).on("load",function(){n.trigger("scroll")}),jQuery.fn.scrollex=function(l){var s=t(this);if(0==this.length)return s;if(this.length>1){for(var r=0;r<this.length;r++)t(this[r]).scrollex(l);return s}if(s.data("_scrollexId"))return s;var a,u,h,c,p;switch(a=i++,u=jQuery.extend({top:0,bottom:0,delay:0,mode:"default",enter:null,leave:null,initialize:null,terminate:null,scroll:null},l),u.mode){case"top":h=function(t,e,n,i,o){return t>=i&&o>=t};break;case"bottom":h=function(t,e,n,i,o){return n>=i&&o>=n};break;case"middle":h=function(t,e,n,i,o){return e>=i&&o>=e};break;case"top-only":h=function(t,e,n,i,o){return i>=t&&n>=i};break;case"bottom-only":h=function(t,e,n,i,o){return n>=o&&o>=t};break;default:case"default":h=function(t,e,n,i,o){return n>=i&&o>=t}}return c=function(t){var i,o,l,s,r,a,u=this.state,h=!1,c=this.$element.offset();i=n.height(),o=t+i/2,l=t+i,s=this.$element.outerHeight(),r=c.top+e(this.options.top,s,i),a=c.top+s-e(this.options.bottom,s,i),h=this.test(t,o,l,r,a),h!=u&&(this.state=h,h?this.options.enter&&this.options.enter.apply(this.element):this.options.leave&&this.options.leave.apply(this.element)),this.options.scroll&&this.options.scroll.apply(this.element,[(o-r)/(a-r)])},p={id:a,options:u,test:h,handler:c,state:null,element:this,$element:s,timeoutId:null},o[a]=p,s.data("_scrollexId",p.id),p.options.initialize&&p.options.initialize.apply(this),s},jQuery.fn.unscrollex=function(){var e=t(this);if(0==this.length)return e;if(this.length>1){for(var n=0;n<this.length;n++)t(this[n]).unscrollex();return e}var i,l;return(i=e.data("_scrollexId"))?(l=o[i],window.clearTimeout(l.timeoutId),delete o[i],e.removeData("_scrollexId"),l.options.terminate&&l.options.terminate.apply(this),e):e}}(jQuery);

View File

@ -1,2 +1,2 @@
/* jquery.scrolly v1.0.0-dev | (c) @ajlkn | MIT licensed */
/* jquery.scrolly v1.0.0-dev | (c) @ajlkn | MIT licensed */
(function(e){function u(s,o){var u,a,f;if((u=e(s))[t]==0)return n;a=u[i]()[r];switch(o.anchor){case"middle":f=a-(e(window).height()-u.outerHeight())/2;break;default:case r:f=Math.max(a,0)}return typeof o[i]=="function"?f-=o[i]():f-=o[i],f}var t="length",n=null,r="top",i="offset",s="click.scrolly",o=e(window);e.fn.scrolly=function(i){var o,a,f,l,c=e(this);if(this[t]==0)return c;if(this[t]>1){for(o=0;o<this[t];o++)e(this[o]).scrolly(i);return c}l=n,f=c.attr("href");if(f.charAt(0)!="#"||f[t]<2)return c;a=jQuery.extend({anchor:r,easing:"swing",offset:0,parent:e("body,html"),pollOnce:!1,speed:1e3},i),a.pollOnce&&(l=u(f,a)),c.off(s).on(s,function(e){var t=l!==n?l:u(f,a);t!==n&&(e.preventDefault(),a.parent.stop().animate({scrollTop:t},a.speed,a.easing))})}})(jQuery);

File diff suppressed because it is too large Load Diff

View File

@ -4,7 +4,7 @@ layout: journal_single
author: Charles #case sensitive, please use capitalization for names.
title: Privacy Policy
sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus
sub_heading: Your data is always yours.
banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341
banner_image_alt: "privacy policy"

View File

@ -4,7 +4,7 @@ layout: journal_single
author: Charles #case sensitive, please use capitalization for names.
title: Terms & Conditions
sub_heading: Maecenas faucibus mollis interdum. Vivamus sagittis lacus
sub_heading: Our rules and regulations.
banner_image: "/assets/images/pic01.jpg" #Size of banner_image 840x341
banner_image_alt: "terms and conditions"

View File

@ -36,13 +36,17 @@ For this tutorial, we will launch a secure SSL NGINX web server for your website
Let's Begin! We begin by installing nginx, certbot and verifying versions Strapi needs. Keep in mind, if you are reading this from the future, the versions will change.
### Update System
```sudo apt update```
### Install Nginx Certbot Packages
```sudo apt install certbot python3-certbot-nginx``
```sudo apt install certbot python3-certbot-nginx```
### Install NGINX & verify version
```sudo apt install nginx```
```node -v && nginx -v```
**Tip:** Strapi recommends nodejs v14, but v12 works.
@ -54,10 +58,13 @@ Let's Begin! We begin by installing nginx, certbot and verifying versions Strapi
Next, we will configure your newly installed Nginx server. By default the configurations are located at: /etc/nginx/ & /etc/nginx/sites-available/. To keep things tidy and organized, we create a new api.example.org conf for each domain we are publicly facing to WWW.
### Make Directory & Copy Default HTML page
```sudo mkdir -p /var/www/api.example.org/html/```
```sudo cp -R /var/www/html/index.nginx-debian.html /var/www/api.example.org/html/index.html```
### Duplicate Default Config
```sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/api.example.org```
### Update NGINX api.example.org Config File
@ -131,16 +138,21 @@ We run the automated tool Certbot and create all the needed files and update our
### Run Certbot
```sudo certbot --nginx```
```Choose api.example.org for the site to create certs. for.```
```Choose option 1 to disable auto redirect HTTP traffic to HTTPS since we already redirected the traffic manually.```
**Note** sudo certbot renew --dry-run will test for automatic renewal for your certs. [Certbot Insturctions]
### Verify api.example.org Updated with Correct Domain
```sudo nano /etc/nginx/sites-enabled/api.example.org```
### Test Config & Restart Nginx
```sudo nginx -t```
```sudo systemctl restart nginx```
## Firewall Configuration
@ -148,10 +160,12 @@ Allow public to connect via HTTPS, we need to open up ports 80 & 443 (HTTP & HTT
### Allow UFW Ports for Public Traffic
```sudo ufw allow HTTPS```
```sudo ufw allow HTTP```
### Verify Status & Reload UFW
```sudo ufw status```
```sudo ufw reload```
**Tip** sudo ufw allow 'Nginx Full' opens both port 80 & 443 (For SSL / TLS encryption).
@ -161,25 +175,31 @@ Now, we must install Strapi 4.0 on the server and launch the Strapi server.
### Strapi Default Installation
Goto desired place to install Strapi project i.e. ~/development/my-strapi-project, then,
```yarn create strapi-app my-project```
**Note:** The default Strapi installation uses SQLite as the database. You are able to use other databases like PostgreSQL. See [Strapi Installation] for more details.
**Note:** The default Strapi installation uses SQLite as the database. You are able to use other databases like PostgreSQL. See **[Strapi Installation]** for more details.
### Launch Strapi Development Server
```yarn develop```
### Launch Strapi from Domain URL
```Goto: api.example.com via web browser of your choice```
```Goto: api.example.com via web browser of your choice.```
```Follow the instructions and continue creating a new Strapi administrator.```
## References:
[Nginx Strapi Configuration:](https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/deployment/optional-software/nginx-proxy.html#nginx-upstream)
#### References:
[Nginx Strapi Configuration](https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/deployment/optional-software/nginx-proxy.html#nginx-upstream)
[Strapi Installation](https://docs.strapi.io/developer-docs/latest/setup-deployment-guides/installation/cli.html#creating-a-strapi-project)
[Nginx Server Blocks:](https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16-04)
[Install Yarn:](https://yarnpkg.com/getting-started/install)
[Certbot Insturctions:](https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal)
## Donations Are Welcome
[Nginx Server Blocks](https://www.digitalocean.com/community/tutorials/how-to-set-up-nginx-server-blocks-virtual-hosts-on-ubuntu-16-04)
[Install Yarn](https://yarnpkg.com/getting-started/install)
[Certbot Insturctions](https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal)
#### Donations Are Welcome
[Cash App](https://cash.app/$sharpeee)
<script type="text/javascript" src="https://cdnjs.buymeacoffee.com/1.0.0/button.prod.min.js" data-name="bmc-button" data-slug="odinzu" data-color="#FFDD00" data-emoji="🍕" data-font="Cookie" data-text="Buy me a pizza" data-outline-color="#000000" data-font-color="#000000" data-coffee-color="#ffffff" ></script>

View File

@ -1,11 +1,11 @@
____ __ ______
/\ _`\ /\ \ /\__ _\ __
\ \,\L\_\ \ \___ __ _ __ _____ _\/_/\ \/ _ __ ___ ___ /\_\ ___ ____
\/_\__ \\ \ _ `\ /'__`\ /\`'__/\ '__`\ /'__`\\ \ \/\`'__/ __`\/' _ `\/\ \ /'___\ /',__\
/\ \L\ \ \ \ \ \/\ \L\.\\ \ \/\ \ \L\ /\ __/ \ \ \ \ \/\ \L\ /\ \/\ \ \ \/\ \__//\__, `\
\/_____/\/_/\/_/\/__/\/_/\/_/ \ \ \/ \/____/ \/_/\/_/\/___/ \/_/\/_/\/_/\/____/\/___/
\ \_\
\/_/
____ __ ______
/\ _`\ /\ \ /\__ _\ __
\ \,\L\_\ \ \___ __ _ __ _____ _\/_/\ \/ _ __ ___ ___ /\_\ ___ ____
\/_\__ \\ \ _ `\ /'__`\ /\`'__/\ '__`\ /'__`\\ \ \/\`'__/ __`\/' _ `\/\ \ /'___\ /',__\
/\ \L\ \ \ \ \ \/\ \L\.\\ \ \/\ \ \L\ /\ __/ \ \ \ \ \/\ \L\ /\ \/\ \ \ \/\ \__//\__, `\
\/_____/\/_/\/_/\/__/\/_/\/_/ \ \ \/ \/____/ \/_/\/_/\/___/ \/_/\/_/\/_/\/____/\/___/
\ \_\
\/_/
Owner: @csharpe_me (Charles Sharpe)
Designer: @ajlkn, @csharpe_me
Developer: @ajlkn, @csharpe_me
@ -32,12 +32,6 @@ SPECIAL THANKS
@ajlkn
aj.lkn.io
@oakstudios
oak.is
@AlainHelaili
helaili.github.io
TECHNOLOGY
----------
@ -62,7 +56,7 @@ yaml.org
Docker - Container virtualization
docker.com
Git, GitHub, GitHub Actions & GitHub Pages - Code collaboration, continuous delivery, version management, DevOps & static hosting
Git, Gitea, Drone, GitHub (Mirror) & Gitea Pages - Code collaboration, continuous delivery, version management, DevOps & static hosting
github.com
Font Awesome - Premium Web icons
@ -103,10 +97,10 @@ Licensing - Use & distribute software
creativecommons.org, gnu.org, fsf.org
Web Browser Testing - Testing UI/UX of the website
google.com/chrome/, www.mozilla.org/en-US/firefox
google.com/chrome/, mozilla.org/en-US/firefox
DuckDuckGo - Search engine privacy
duckduckgo.com
Startpage - Search engine privacy
startpage.com
FONTS