diff --git a/.gitignore b/.gitignore
index 25336fb9..440f920d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,15 +1,21 @@
-# Created by https://www.gitignore.io/api/macos,swift,xcode,objective-c
+# Created by https://www.gitignore.io/api/macos,swift,xcode,objective-c,jekyll
+
+### Jekyll ###
+_site/
+.sass-cache/
+.jekyll-cache/
+.jekyll-metadata
### macOS ###
-*.DS_Store
+# General
+.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
-
# Thumbnails
._*
@@ -37,12 +43,7 @@ Temporary Items
## Build generated
build/
DerivedData/
-Products/
-## Various settings
-# Xcode
-#
-build/
## Various settings
*.pbxuser
!default.pbxuser
@@ -56,7 +57,6 @@ xcuserdata/
## Other
*.moved-aside
-*.xcuserstate
*.xccheckout
*.xcscmblueprint
@@ -66,10 +66,23 @@ xcuserdata/
*.dSYM.zip
*.dSYM
-# CocoaPods - Refactored to standalone file
+# CocoaPods
+#
+# We recommend against adding the Pods directory to your .gitignore. However
+# you should judge for yourself, the pros and cons are mentioned at:
+# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
+#
+# Pods/
+#
+# Add this line if you want to avoid checking in source code from the Xcode workspace
+# *.xcworkspace
+# Carthage
+#
+# Add this line if you want to avoid checking in source code from Carthage dependencies.
+# Carthage/Checkouts
-# Carthage - Refactored to standalone file
+Carthage/Build
# fastlane
#
@@ -80,7 +93,7 @@ xcuserdata/
fastlane/report.xml
fastlane/Preview.html
-fastlane/screenshots
+fastlane/screenshots/**/*.png
fastlane/test_output
# Code Injection
@@ -113,14 +126,9 @@ playground.xcworkspace
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
+# Package.pins
+# Package.resolved
.build/
-xcuserdata
-*.xccheckout
-*.moved-aside
-DerivedData
-*.hmap
-*.ipa
-*.xcuserstate
# CocoaPods
#
@@ -129,39 +137,21 @@ DerivedData
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
Pods/
+#
+# Add this line if you want to avoid checking in source code from the Xcode workspace
+# *.xcworkspace
# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts
-Carthage/Build
-# Package.pins
-.build/
-
-# CocoaPods - Refactored to standalone file
-
-# Carthage - Refactored to standalone file
# fastlane
#
# It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
# screenshots whenever they are needed.
# For more information about the recommended setup visit:
-# https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
-
-fastlane/report.xml
-fastlane/Preview.html
-fastlane/screenshots
-fastlane/test_output
-__PROJECT_NAME__.framework.zip
-
-examples/*/*.xcassets/*/*.png
-examples/*/*.xcassets/*/*.pdf
-
-playgrounds
-
-.version
# https://docs.fastlane.tools/best-practices/source-control/#source-control
@@ -170,11 +160,11 @@ playgrounds
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
-## Build generated
+## User settings
-## Various settings
+## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
-## Other
+## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
### Xcode Patch ###
*.xcodeproj/*
@@ -183,7 +173,8 @@ playgrounds
!*.xcworkspace/contents.xcworkspacedata
/*.gcno
-# End of https://www.gitignore.io/api/macos,swift,xcode,objective-c
+
+# End of https://www.gitignore.io/api/macos,swift,xcode,objective-c,jekyll
Products
*tests/*.png
@@ -198,4 +189,11 @@ certs/*.cer
certs/*.p12
*.toc.*
-*.orig.*
\ No newline at end of file
+*.orig.*
+
+examples/*/*.xcassets/*/*.png
+examples/*/*.xcassets/*/*.pdf
+
+playgrounds
+
+.version
\ No newline at end of file
diff --git a/.gitmodules b/.gitmodules
index f8703761..855f6f17 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,3 @@
-[submodule "gh-pages"]
- path = gh-pages
- url = https://github.com/brightdigit/Speculid.git
- branch = gh-pages
[submodule "scripts/github-markdown-toc"]
path = scripts/github-markdown-toc
url = https://github.com/ekalinin/github-markdown-toc.git
diff --git a/CNAME b/CNAME
new file mode 100644
index 00000000..372b4286
--- /dev/null
+++ b/CNAME
@@ -0,0 +1 @@
+speculid.com
\ No newline at end of file
diff --git a/Gemfile b/Gemfile
index a24f09b2..4fd2f2b5 100644
--- a/Gemfile
+++ b/Gemfile
@@ -1,9 +1,3 @@
-# frozen_string_literal: true
-
-source "https://rubygems.org"
-
-git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
-
-# gem "rails"
-
-gem "cocoapods", "~> 1.5"
+source 'https://rubygems.org'
+gem 'github-pages', group: :jekyll_plugins
+gem "cocoapods", "~> 1.5"
\ No newline at end of file
diff --git a/Gemfile.lock b/Gemfile.lock
index 84a9eadf..961ced3a 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -7,7 +7,9 @@ GEM
minitest (~> 5.1)
thread_safe (~> 0.3, >= 0.3.4)
tzinfo (~> 1.1)
- atomos (0.1.2)
+ addressable (2.5.2)
+ public_suffix (>= 2.0.2, < 4.0)
+ atomos (0.1.3)
claide (1.0.2)
cocoapods (1.5.3)
activesupport (>= 4.0.2, < 5)
@@ -38,39 +40,262 @@ GEM
nap
cocoapods-search (1.0.0)
cocoapods-stats (1.0.0)
- cocoapods-trunk (1.3.0)
+ cocoapods-trunk (1.3.1)
nap (>= 0.8, < 2.0)
netrc (~> 0.11)
cocoapods-try (1.1.0)
+ coffee-script (2.4.1)
+ coffee-script-source
+ execjs
+ coffee-script-source (1.11.1)
+ colorator (1.1.0)
colored2 (3.1.2)
+ commonmarker (0.17.11)
+ ruby-enum (~> 0.5)
concurrent-ruby (1.0.5)
+ dnsruby (1.61.2)
+ addressable (~> 2.5)
+ em-websocket (0.5.1)
+ eventmachine (>= 0.12.9)
+ http_parser.rb (~> 0.6.0)
escape (0.0.4)
+ ethon (0.11.0)
+ ffi (>= 1.3.0)
+ eventmachine (1.2.7)
+ execjs (2.7.0)
+ faraday (0.15.2)
+ multipart-post (>= 1.2, < 3)
+ ffi (1.9.25)
+ forwardable-extended (2.6.0)
fourflusher (2.0.1)
fuzzy_match (2.0.4)
+ gemoji (3.0.0)
gh_inspector (1.1.3)
+ github-pages (191)
+ activesupport (= 4.2.10)
+ github-pages-health-check (= 1.8.1)
+ jekyll (= 3.7.3)
+ jekyll-avatar (= 0.6.0)
+ jekyll-coffeescript (= 1.1.1)
+ jekyll-commonmark-ghpages (= 0.1.5)
+ jekyll-default-layout (= 0.1.4)
+ jekyll-feed (= 0.10.0)
+ jekyll-gist (= 1.5.0)
+ jekyll-github-metadata (= 2.9.4)
+ jekyll-mentions (= 1.4.1)
+ jekyll-optional-front-matter (= 0.3.0)
+ jekyll-paginate (= 1.1.0)
+ jekyll-readme-index (= 0.2.0)
+ jekyll-redirect-from (= 0.14.0)
+ jekyll-relative-links (= 0.5.3)
+ jekyll-remote-theme (= 0.3.1)
+ jekyll-sass-converter (= 1.5.2)
+ jekyll-seo-tag (= 2.5.0)
+ jekyll-sitemap (= 1.2.0)
+ jekyll-swiss (= 0.4.0)
+ jekyll-theme-architect (= 0.1.1)
+ jekyll-theme-cayman (= 0.1.1)
+ jekyll-theme-dinky (= 0.1.1)
+ jekyll-theme-hacker (= 0.1.1)
+ jekyll-theme-leap-day (= 0.1.1)
+ jekyll-theme-merlot (= 0.1.1)
+ jekyll-theme-midnight (= 0.1.1)
+ jekyll-theme-minimal (= 0.1.1)
+ jekyll-theme-modernist (= 0.1.1)
+ jekyll-theme-primer (= 0.5.3)
+ jekyll-theme-slate (= 0.1.1)
+ jekyll-theme-tactile (= 0.1.1)
+ jekyll-theme-time-machine (= 0.1.1)
+ jekyll-titles-from-headings (= 0.5.1)
+ jemoji (= 0.10.1)
+ kramdown (= 1.17.0)
+ liquid (= 4.0.0)
+ listen (= 3.1.5)
+ mercenary (~> 0.3)
+ minima (= 2.5.0)
+ nokogiri (>= 1.8.2, < 2.0)
+ rouge (= 2.2.1)
+ terminal-table (~> 1.4)
+ github-pages-health-check (1.8.1)
+ addressable (~> 2.3)
+ dnsruby (~> 1.60)
+ octokit (~> 4.0)
+ public_suffix (~> 2.0)
+ typhoeus (~> 1.3)
+ html-pipeline (2.8.4)
+ activesupport (>= 2)
+ nokogiri (>= 1.4)
+ http_parser.rb (0.6.0)
i18n (0.9.5)
concurrent-ruby (~> 1.0)
+ jekyll (3.7.3)
+ addressable (~> 2.4)
+ colorator (~> 1.0)
+ em-websocket (~> 0.5)
+ i18n (~> 0.7)
+ jekyll-sass-converter (~> 1.0)
+ jekyll-watch (~> 2.0)
+ kramdown (~> 1.14)
+ liquid (~> 4.0)
+ mercenary (~> 0.3.3)
+ pathutil (~> 0.9)
+ rouge (>= 1.7, < 4)
+ safe_yaml (~> 1.0)
+ jekyll-avatar (0.6.0)
+ jekyll (~> 3.0)
+ jekyll-coffeescript (1.1.1)
+ coffee-script (~> 2.2)
+ coffee-script-source (~> 1.11.1)
+ jekyll-commonmark (1.2.0)
+ commonmarker (~> 0.14)
+ jekyll (>= 3.0, < 4.0)
+ jekyll-commonmark-ghpages (0.1.5)
+ commonmarker (~> 0.17.6)
+ jekyll-commonmark (~> 1)
+ rouge (~> 2)
+ jekyll-default-layout (0.1.4)
+ jekyll (~> 3.0)
+ jekyll-feed (0.10.0)
+ jekyll (~> 3.3)
+ jekyll-gist (1.5.0)
+ octokit (~> 4.2)
+ jekyll-github-metadata (2.9.4)
+ jekyll (~> 3.1)
+ octokit (~> 4.0, != 4.4.0)
+ jekyll-mentions (1.4.1)
+ html-pipeline (~> 2.3)
+ jekyll (~> 3.0)
+ jekyll-optional-front-matter (0.3.0)
+ jekyll (~> 3.0)
+ jekyll-paginate (1.1.0)
+ jekyll-readme-index (0.2.0)
+ jekyll (~> 3.0)
+ jekyll-redirect-from (0.14.0)
+ jekyll (~> 3.3)
+ jekyll-relative-links (0.5.3)
+ jekyll (~> 3.3)
+ jekyll-remote-theme (0.3.1)
+ jekyll (~> 3.5)
+ rubyzip (>= 1.2.1, < 3.0)
+ jekyll-sass-converter (1.5.2)
+ sass (~> 3.4)
+ jekyll-seo-tag (2.5.0)
+ jekyll (~> 3.3)
+ jekyll-sitemap (1.2.0)
+ jekyll (~> 3.3)
+ jekyll-swiss (0.4.0)
+ jekyll-theme-architect (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-cayman (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-dinky (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-hacker (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-leap-day (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-merlot (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-midnight (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-minimal (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-modernist (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-primer (0.5.3)
+ jekyll (~> 3.5)
+ jekyll-github-metadata (~> 2.9)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-slate (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-tactile (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-theme-time-machine (0.1.1)
+ jekyll (~> 3.5)
+ jekyll-seo-tag (~> 2.0)
+ jekyll-titles-from-headings (0.5.1)
+ jekyll (~> 3.3)
+ jekyll-watch (2.0.0)
+ listen (~> 3.0)
+ jemoji (0.10.1)
+ gemoji (~> 3.0)
+ html-pipeline (~> 2.2)
+ jekyll (~> 3.0)
+ kramdown (1.17.0)
+ liquid (4.0.0)
+ listen (3.1.5)
+ rb-fsevent (~> 0.9, >= 0.9.4)
+ rb-inotify (~> 0.9, >= 0.9.7)
+ ruby_dep (~> 1.2)
+ mercenary (0.3.6)
+ mini_portile2 (2.3.0)
+ minima (2.5.0)
+ jekyll (~> 3.5)
+ jekyll-feed (~> 0.9)
+ jekyll-seo-tag (~> 2.1)
minitest (5.11.3)
- molinillo (0.6.5)
+ molinillo (0.6.6)
+ multipart-post (2.0.0)
nanaimo (0.2.6)
nap (1.1.0)
netrc (0.11.0)
+ nokogiri (1.8.4)
+ mini_portile2 (~> 2.3.0)
+ octokit (4.10.0)
+ sawyer (~> 0.8.0, >= 0.5.3)
+ pathutil (0.16.1)
+ forwardable-extended (~> 2.6)
+ public_suffix (2.0.5)
+ rb-fsevent (0.10.3)
+ rb-inotify (0.9.10)
+ ffi (>= 0.5.0, < 2)
+ rouge (2.2.1)
+ ruby-enum (0.7.2)
+ i18n
ruby-macho (1.2.0)
+ ruby_dep (1.5.0)
+ rubyzip (1.2.1)
+ safe_yaml (1.0.4)
+ sass (3.5.7)
+ sass-listen (~> 4.0.0)
+ sass-listen (4.0.0)
+ rb-fsevent (~> 0.9, >= 0.9.4)
+ rb-inotify (~> 0.9, >= 0.9.7)
+ sawyer (0.8.1)
+ addressable (>= 2.3.5, < 2.6)
+ faraday (~> 0.8, < 1.0)
+ terminal-table (1.8.0)
+ unicode-display_width (~> 1.1, >= 1.1.1)
thread_safe (0.3.6)
+ typhoeus (1.3.0)
+ ethon (>= 0.9.0)
tzinfo (1.2.5)
thread_safe (~> 0.1)
- xcodeproj (1.5.9)
+ unicode-display_width (1.4.0)
+ xcodeproj (1.6.0)
CFPropertyList (>= 2.3.3, < 4.0)
- atomos (~> 0.1.2)
+ atomos (~> 0.1.3)
claide (>= 1.0.2, < 2.0)
colored2 (~> 3.1)
- nanaimo (~> 0.2.5)
+ nanaimo (~> 0.2.6)
PLATFORMS
ruby
DEPENDENCIES
cocoapods (~> 1.5)
+ github-pages
BUNDLED WITH
1.16.2
diff --git a/_config.yml b/_config.yml
index c4192631..8224d707 100644
--- a/_config.yml
+++ b/_config.yml
@@ -1 +1,21 @@
-theme: jekyll-theme-cayman
\ No newline at end of file
+url: "https://speculid.com"
+logo_url: /images/Logo.svg
+theme: jekyll-theme-cayman
+show_downloads: false
+google_analytics: UA-33667276-14
+show_signup: true
+plugins:
+ - jekyll-sitemap
+exclude:
+ - applications
+ - bin
+ - CairoSVG*
+ - certs
+ - examples
+ - frameworks
+ - scripts
+ - Speculid*
+ - tests
+ - "*.plist"
+ - Gemfile*
+ - Podfile*
diff --git a/_layouts/default.html b/_layouts/default.html
new file mode 100644
index 00000000..8f5a73b1
--- /dev/null
+++ b/_layouts/default.html
@@ -0,0 +1,126 @@
+
+
+
+
+
+{% seo %}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {% if site.google_analytics %}
+
+ {% endif %}
+
+
\ No newline at end of file
diff --git a/android-chrome-192x192.png b/android-chrome-192x192.png
new file mode 100644
index 00000000..7210829a
Binary files /dev/null and b/android-chrome-192x192.png differ
diff --git a/android-chrome-512x512.png b/android-chrome-512x512.png
new file mode 100644
index 00000000..b8640faf
Binary files /dev/null and b/android-chrome-512x512.png differ
diff --git a/apple-touch-icon.png b/apple-touch-icon.png
new file mode 100644
index 00000000..81893b19
Binary files /dev/null and b/apple-touch-icon.png differ
diff --git a/assets/css/style.scss b/assets/css/style.scss
new file mode 100644
index 00000000..35fe69f7
--- /dev/null
+++ b/assets/css/style.scss
@@ -0,0 +1,344 @@
+---
+---
+
+$header-bg-color: #F1F1F1 !default;
+$header-bg-color-secondary: #F4F2F3 !default;
+$header-heading-color: #333 !default;
+
+@import url('https://fonts.googleapis.com/css?family=Khula:300,600,800');
+@import "{{ site.theme }}";
+
+strong {
+ font-weight: 600;
+}
+.page-header {
+ background-image: url(/images/background-1.jpg);
+ background-size: contain;
+ background-attachment: fixed;
+ background-position: top right;
+ background-repeat: no-repeat;
+ @media screen and (max-width: 64em) {
+ background-size: cover;
+ }
+ & > img {
+ -webkit-filter: drop-shadow(5px 5px 2px #222);
+ filter: drop-shadow(5px 5px 2px #222);
+ width: 250px;
+ height: 250px;
+ }
+ h2 {
+ font-weight: 600;
+ &.release-name {
+ font-weight: 300;
+ opacity: 0.6;
+ padding: 0;
+ margin: 0;
+ font-size: 1.25em;
+ }
+ }
+}
+
+.cards {
+ text-align: center;
+ display: table;
+ clear: both;
+ width: 100%;
+
+ .card {
+ @media screen and (min-width: 42em) {
+ display: table-cell;
+ padding: 1em;
+ width: 100%;
+ &.half {
+ width: 50%;
+ }
+ &.whole {
+ }
+ &.third {
+ width: 33.33%;
+ width: calc(100% / 3);
+ }
+ }
+ p, ul {
+ font-size: 0.75em;
+ }
+ ul {
+text-align: left;
+ margin: 0 12%;
+ @media screen and (min-width: 42em) {
+ width: 500px;
+ margin: 0 auto;
+ font-size: 0.825em;
+ }
+ & > li {
+ & > strong {
+ &:after {
+ content: " ";
+ display: block;
+ }
+ }
+ }
+ }
+ }
+}
+
+#markdown-toc {
+ li > ul > li > ul {
+ display: none;
+ }
+ #markdown-toc-table-of-contents {
+ font-weight: 100;
+ opacity: 0.5;
+ &:before {
+ content: "▶︎ ";
+ font-size: 0.8em;
+ line-height: 1em;
+ }
+ }
+}
+
+h1#speculid {
+ display: none;
+}
+
+#introduction {
+ display: none;
+}
+
+body, input, button {
+ font-family: "Khula", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
+}
+
+.page-header {
+ .signup-form-container {
+ & > div {
+ color: #333;
+ font-size: 1.5em;
+ }
+ min-width: 250px;
+ @media screen and (min-width: 42em) {
+ width: 400px;
+ }
+ form {
+ margin: -5px auto;
+ display: table;
+ & > div {
+ display: table-row;
+ & > input {
+ display: table-cell;
+ width: 100%;
+ font-size: 1.25em;
+ margin: 5px 0;
+ }
+ }
+ }
+ }
+ a.btn.open-popup {
+ padding: 8px 100px 0px;
+ background-color: $body-link-color;
+ color: #FFF;
+ border: 1px transparentize($border-color, 0.5) solid;
+ font-size: 1.5em;
+ border-radius: 5px;
+ font-weight: bold;
+ img {
+ height: 1em;
+ margin: 10px;
+ }
+ span {
+ margin-top: 10px;
+ display: block;
+ float: right;
+ }
+ &:hover {
+ span {
+ text-decoration: underline;
+ }
+ }
+ }
+}
+
+.signup-form-container {
+ display: table;
+ .main-content > & {
+ background-color: saturate($code-bg-color, 33%);
+ border: 1px $border-color solid;
+ border-radius: 5px;
+ padding: 40px;
+ width: 100%;
+ form.signup-form {
+ input {
+ width: 250px;
+ &[type="submit"] {
+ padding-left: 50px;
+ padding-right: 50px;
+
+ }
+ }
+ }
+ }
+ .page-header > & {
+ margin: auto;
+ & > .message {
+
+ font-weight: 800;
+ margin-top: 1em;
+
+ &.visible, &.failure {
+ opacity: 0.8;
+ }
+ &.failure:before {
+ content: "❗"
+ }
+ &.success.visible:before {
+ content: "📩"
+ }
+ }
+ }
+ .message {
+ display: table-row;
+ & , &.success {
+ visiblity: hidden;
+ opacity: 0;
+ }
+ &.visible, &.failure {
+ visiblity: visible;
+ opacity: 0.5;
+ }
+ &.failure {
+ color: #F00;
+ }
+ &.success {
+ color: $section-headings-color;
+ }
+ }
+ form.signup-form {
+ width: 100%;
+ .row {
+ display: flex;
+ input {
+ margin: 10px;
+ padding: 5px 10px;
+ border-radius: 5px;
+ border: 1px transparentize(#000, 0.8) solid;
+ &:first-child {
+ margin-left: 0px;
+ }
+ &:last-child {
+ margin-right: 0px;
+ }
+ &[type="email"] {
+ flex-grow: 1;
+ }
+ &[type="submit"] {
+ background-color: darken($body-link-color, 10%);
+ color: darken(#FFF, 15%);
+ border-color: transparentize($border-color, 0.5);
+ .main-content & {
+ font-weight: bold;
+ }
+ .page-header > &, &:hover {
+ color: #fff;
+ background-color: $body-link-color;
+ }
+ }
+ }
+ }
+ }
+}
+
+.readme-only {
+ display: none;
+}
+
+
+/* The ribbons */
+
+.corner-ribbon{
+ width: 200px;
+ background: #e43;
+ position: absolute;
+ top: 25px;
+ left: -50px;
+ text-align: center;
+ line-height: 50px;
+ letter-spacing: 1px;
+ color: #f0f0f0;
+ transform: rotate(-45deg);
+ -webkit-transform: rotate(-45deg);
+}
+
+/* Custom styles */
+
+.corner-ribbon.sticky{
+ position: fixed;
+}
+
+.corner-ribbon.shadow{
+ box-shadow: 0 0 3px rgba(0,0,0,.3);
+}
+
+/* Different positions */
+
+.corner-ribbon.top-left{
+ top: 25px;
+ left: -50px;
+ transform: rotate(-45deg);
+ -webkit-transform: rotate(-45deg);
+}
+
+.corner-ribbon.top-right{
+ top: 25px;
+ right: -50px;
+ left: auto;
+ transform: rotate(45deg);
+ -webkit-transform: rotate(45deg);
+}
+
+.corner-ribbon.bottom-left{
+ top: auto;
+ bottom: 25px;
+ left: -50px;
+ transform: rotate(45deg);
+ -webkit-transform: rotate(45deg);
+}
+
+.corner-ribbon.bottom-right{
+ top: auto;
+ right: -50px;
+ bottom: 25px;
+ left: auto;
+ transform: rotate(-45deg);
+ -webkit-transform: rotate(-45deg);
+}
+
+/* Colors */
+
+.corner-ribbon.white{background: #f0f0f0; color: #555;}
+.corner-ribbon.black{background: #333;}
+.corner-ribbon.grey{background: #999;}
+.corner-ribbon.blue{background: #39d;}
+.corner-ribbon.green{background: #2c7;}
+.corner-ribbon.turquoise{background: #1b9;}
+.corner-ribbon.purple{background: #95b;}
+.corner-ribbon.red{background: #e43;}
+.corner-ribbon.orange{background: #e82;}
+.corner-ribbon.yellow{background: #ec0;}
+
+.corner-ribbon {
+ font-size: 0.75em;
+ text-transform: uppercase;
+ font-weight: 600;
+ a {
+ color: #FCC;
+ &:hover {
+ color: #FFF;
+ text-decoration: none;
+ }
+ }
+}
+
+.main-content a.html-only:first-child{
+ display: none;
+}
+
diff --git a/assets/images/XcodeBuildPhaseRunScript.png b/assets/images/XcodeBuildPhaseRunScript.png
deleted file mode 100644
index ed40f6f1..00000000
Binary files a/assets/images/XcodeBuildPhaseRunScript.png and /dev/null differ
diff --git a/assets/js/signup-form.js b/assets/js/signup-form.js
new file mode 100644
index 00000000..ecad9aee
--- /dev/null
+++ b/assets/js/signup-form.js
@@ -0,0 +1,92 @@
+document.addEventListener("DOMContentLoaded", function(event) {
+ // - Code to execute when all DOM content is loaded.
+ // - including fonts, images, etc.
+
+ var elements = document.getElementsByClassName("signup-form");
+ Array.prototype.forEach.call(elements, function(div){
+
+ var $message = div.nextElementSibling.classList.contains("message") && div.nextElementSibling;
+ var $submit = div.querySelectorAll('input[type="submit"]');
+ var currentType;
+ $message._show = function(type, text) {
+
+ var prefix = "";
+ //var iconClass = icon[type];
+ //if (iconClass) {
+ // prefix = ''
+ //}
+ currentType = type;
+ $message.innerHTML = prefix + text;
+ $message.classList.add(type);
+ $message.classList.add('visible');
+
+ if (type == "success") {
+ window.setTimeout(function() {
+ $message._hide();
+ }, 10000);
+ }
+
+ };
+
+ $message._hide = function() {
+ $message.classList.remove('visible');
+ if (currentType) {
+ $message.classList.remove(currentType);
+ }
+ };
+ div.addEventListener('submit', function(event) {
+
+ var email = div.querySelector("input[type=email]").value;
+ event.stopPropagation();
+ event.preventDefault();
+
+
+ ga && ga('send', 'event', {
+ eventCategory: 'signup',
+ eventAction: 'submit'
+ });
+ // Hide message.
+ $message._hide();
+
+ // Disable submit.
+ $submit.disabled = true;
+
+
+ var timeStart = Date.now();
+ var script = document.createElement('script');
+ script.src = div.getAttribute('action') + "&c=signup_success&EMAIL=" + encodeURIComponent(email);
+
+ window.signup_success = function(data)
+ {
+ ga('send', {
+ hitType: 'timing',
+ timingCategory: 'signup_form',
+ timingVar: 'submission_complete',
+ timingValue: (Date.now() - timeStart)
+ });
+ fbq && fbq('track', 'CompleteRegistration', { 'status' : (data.result || "failure")});
+ if (data.result === "success") {
+ $message._show('success', "Check your email soon for the download link.");
+ ga && ga('send', 'event', {
+ eventCategory: 'signup',
+ eventAction: 'completed'
+ });
+ qp && qp('track', 'CompleteRegistration');
+ window.dataLayer = window.dataLayer || [];
+ window.dataLayer.push({
+ 'event': 'signup-completed'
+ });
+ } else {
+ ga('send', 'exception', {
+ 'exDescription': (data.msg || "unknown error")
+ });
+ $message._show('failure', data.msg);
+ }
+ $submit.disabled = false;
+ document.getElementsByTagName('head')[0].removeChild(script);
+ }
+ document.getElementsByTagName('head')[0].appendChild(script);
+ });
+ });
+});
+
diff --git a/browserconfig.xml b/browserconfig.xml
new file mode 100644
index 00000000..b3930d0f
--- /dev/null
+++ b/browserconfig.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+ #da532c
+
+
+
diff --git a/favicon-16x16.png b/favicon-16x16.png
new file mode 100644
index 00000000..e144f712
Binary files /dev/null and b/favicon-16x16.png differ
diff --git a/favicon-32x32.png b/favicon-32x32.png
new file mode 100644
index 00000000..8fd2658d
Binary files /dev/null and b/favicon-32x32.png differ
diff --git a/favicon.ico b/favicon.ico
new file mode 100644
index 00000000..69c5b86f
Binary files /dev/null and b/favicon.ico differ
diff --git a/gh-pages b/gh-pages
deleted file mode 160000
index b7babda5..00000000
--- a/gh-pages
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit b7babda5bb33147e77e3cc23b1a57fc477b54859
diff --git a/assets/images/Diagram.png b/images/Diagram.png
similarity index 100%
rename from assets/images/Diagram.png
rename to images/Diagram.png
diff --git a/images/Grinder.svg b/images/Grinder.svg
new file mode 100644
index 00000000..29f8609f
--- /dev/null
+++ b/images/Grinder.svg
@@ -0,0 +1,66 @@
+
+
+
diff --git a/images/Logo-Dashed.svg b/images/Logo-Dashed.svg
new file mode 100644
index 00000000..18fcb12c
--- /dev/null
+++ b/images/Logo-Dashed.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/assets/images/Logo.png b/images/Logo.png
similarity index 100%
rename from assets/images/Logo.png
rename to images/Logo.png
diff --git a/assets/images/Logo.svg b/images/Logo.svg
similarity index 100%
rename from assets/images/Logo.svg
rename to images/Logo.svg
diff --git a/assets/images/Logo@2x.png b/images/Logo@2x.png
similarity index 100%
rename from assets/images/Logo@2x.png
rename to images/Logo@2x.png
diff --git a/assets/images/Logo@3x.png b/images/Logo@3x.png
similarity index 100%
rename from assets/images/Logo@3x.png
rename to images/Logo@3x.png
diff --git a/assets/images/Logo@4x.png b/images/Logo@4x.png
similarity index 100%
rename from assets/images/Logo@4x.png
rename to images/Logo@4x.png
diff --git a/assets/images/SetExample.png b/images/SetExample.png
similarity index 100%
rename from assets/images/SetExample.png
rename to images/SetExample.png
diff --git a/images/XcodeBuildPhaseRunScript.png b/images/XcodeBuildPhaseRunScript.png
new file mode 100644
index 00000000..0eb6d4f0
Binary files /dev/null and b/images/XcodeBuildPhaseRunScript.png differ
diff --git a/assets/images/XcodeTargetMembership.png b/images/XcodeTargetMembership.png
similarity index 100%
rename from assets/images/XcodeTargetMembership.png
rename to images/XcodeTargetMembership.png
diff --git a/assets/images/XcodeUnorganizedAssets.png b/images/XcodeUnorganizedAssets.png
similarity index 100%
rename from assets/images/XcodeUnorganizedAssets.png
rename to images/XcodeUnorganizedAssets.png
diff --git a/images/archive.svg b/images/archive.svg
new file mode 100644
index 00000000..cd60c8bb
--- /dev/null
+++ b/images/archive.svg
@@ -0,0 +1,43 @@
+
+
+
diff --git a/images/background-1.jpg b/images/background-1.jpg
new file mode 100644
index 00000000..e1165d03
Binary files /dev/null and b/images/background-1.jpg differ
diff --git a/images/background-2.jpg b/images/background-2.jpg
new file mode 100644
index 00000000..2aafe31e
Binary files /dev/null and b/images/background-2.jpg differ
diff --git a/images/background-3.jpg b/images/background-3.jpg
new file mode 100644
index 00000000..6b944eae
Binary files /dev/null and b/images/background-3.jpg differ
diff --git a/images/background-4.jpg b/images/background-4.jpg
new file mode 100644
index 00000000..5089cdda
Binary files /dev/null and b/images/background-4.jpg differ
diff --git a/images/clean-code.svg b/images/clean-code.svg
new file mode 100644
index 00000000..15e1b0bc
--- /dev/null
+++ b/images/clean-code.svg
@@ -0,0 +1,67 @@
+
+
+
diff --git a/images/download.svg b/images/download.svg
new file mode 100644
index 00000000..67261299
--- /dev/null
+++ b/images/download.svg
@@ -0,0 +1,47 @@
+
+
+
diff --git a/images/emoji.svg b/images/emoji.svg
new file mode 100644
index 00000000..05727ef7
--- /dev/null
+++ b/images/emoji.svg
@@ -0,0 +1,50 @@
+
+
+
diff --git a/images/machinery.svg b/images/machinery.svg
new file mode 100644
index 00000000..6f1145b1
--- /dev/null
+++ b/images/machinery.svg
@@ -0,0 +1,71 @@
+
+
+
diff --git a/images/mechanic.svg b/images/mechanic.svg
new file mode 100644
index 00000000..2c4d494f
--- /dev/null
+++ b/images/mechanic.svg
@@ -0,0 +1,68 @@
+
+
+
diff --git a/images/multiple-images.svg b/images/multiple-images.svg
new file mode 100644
index 00000000..6aceb9a7
--- /dev/null
+++ b/images/multiple-images.svg
@@ -0,0 +1,53 @@
+
+
+
+
diff --git a/images/resize.svg b/images/resize.svg
new file mode 100644
index 00000000..edaa70f6
--- /dev/null
+++ b/images/resize.svg
@@ -0,0 +1,69 @@
+
+
+
diff --git a/images/vector.svg b/images/vector.svg
new file mode 100644
index 00000000..0fc73666
--- /dev/null
+++ b/images/vector.svg
@@ -0,0 +1,100 @@
+
+
+
diff --git a/index.md b/index.md
new file mode 100644
index 00000000..9d85d6af
--- /dev/null
+++ b/index.md
@@ -0,0 +1,286 @@
+[{{ site.github.project_tagline }}](#){:class="html-only"}
+
+
+
+
+
+# Introduction
+
+## Challenges Managing Graphic Assets
+
+Part of the process of building an app for **watchOS**, **iOS**, or **macOS** is including all the image assets and app icons in your application. Each image assets or app icons requires **several copies for different resolutions, different devices, and different sizes.** Right now, this needs to be done by exporting all the various similar images from a major graphics application.
+
+That means developers need to:
+
+
+
+
+
+![Multiple Images](/images/mechanic.svg){:height="100px"}{:class="html-only"}
+
+### Manually Create Multiple Sizes
+
+Each graphic must be **manually converted and resized several times for each update**.
+
+
+
+
+![Multiple Images](/images/archive.svg){:height="100px"}{:class="html-only"}
+
+### Store Generated Image Files
+
+An asset catalog image set will need a 1x, 2x, 3x of each graphic and **App Icons may need as many 30 different sizes**.
+
+
+
+
+### What If You Had...
+
+
+
+
+
+![Multiple Images](/images/emoji.svg){:height="100px"}{:class="html-only"}
+![Multiple Images](/images/emoji.svg){:height="75px"}{:class="html-only"}
+![Multiple Images](/images/emoji.svg){:height="50px"}{:class="html-only"}
+![Multiple Images](/images/emoji.svg){:height="25px"}{:class="html-only"}
+![Multiple Images](/images/emoji.svg){:height="12px"}{:class="html-only"}
+![Multiple Images](/images/emoji.svg){:height="6px"}{:class="html-only"}
+
+
+
+#### Care-Free Graphic Management Where...
+
+* **Only one file is needed** _for each Image Set and App Icon._
+* **Graphic Designers need only export a single file change** _each time rather than as many as serveral scaled copies._
+* **Resizing and conversion is done behind the scenes** _based on a single source image._
+
+
+
+
+## What Speculid Does
+
+**Speculid** links a single graphic file to an Image Set or App Icon and automatically renders different resolutions, file types, and sizes for all the image specifications required.
+
+![diagram](/images/Diagram.png)
+
+
+
+
+![Multiple Images](/images/machinery.svg){:height="100px"}{:class="html-only"}
+
+### Automate the process
+
+Speculid automates the process so **only one graphic file is needed**. Add Speculid to your build process and now the **conversions and resizing are automated** as part of the build process. Now there is no need for anyone to manually create each size for each device every time.
+
+
+
+
+![Multiple Images](/images/clean-code.svg){:height="100px"}{:class="html-only"}
+
+### Tidy Your Repo
+
+**Reduce the size of your repository** by including a single vector or raster image and ignore all your automated png and pdf files at compile. That means **faster remote pulls, less redundancy, and complete syncronization between sizes.**
+
+
+
+
+### Features
+
+This means **Speuclid** can...
+
+* **take multiple input file types including SVG vector files** and raster PNG files
+* **automatically create each necessary resized raster file**
+* **remove transparencies from PNG and SVG file** for App Icons
+* **export to PDF for vector images in Image Sets** as well as PNG
+
+#### Input File Types Supported
+
+* **SVG** - Scalable Vector Graphics
+* **PNG** - Portable Network Graphics
+
+#### Modifiers
+
+* [Adding Background Colors](#background-optional-background)
+* [Transparency Removal](#remove-alpha-optional--remove-alpha)
+
+#### Output File Types Supported
+
+* **PNG** - Portable Network Graphics
+* **PDF** - Portable Document Format
+
+# Download
+
+
+
+
+
+
+
+Enter your email address [here](https://speculid.com#download) to request access to the latest version.
+
+
+
+# Table of Contents
+
+* TOC
+{:toc}
+
+# Installation
+
+Once you have unzipped the file, go ahead, and **copy the application *Speculid.App* to the Applications folder**.
+
+# Usage
+
+Speculid only supports being called through a command line terminal for now.
+
+```bash
+$ /Applications/Speculid/Contents/MacOS/Speculid --process
+$ /Applications/Speculid/Contents/MacOS/Speculid --help
+$ /Applications/Speculid/Contents/MacOS/Speculid --version
+
+Options:
+ --help Show this screen.
+ --version Show version.
+```
+
+## File Format
+
+The `.speculid` file is a `json` file with the image set or app icon path, the graphic file source, and optionally basic image geometry (width or height). All paths specified in the json file could be relative to the `.speculid` file or an absolute path. Such as
+
+```json
+{
+ "set" : "Assets.xcassets/Raster Image.imageset",
+ "source" : "layers.png",
+ "geometry" : "128"
+}
+```
+or
+```json
+{
+ "set" : "Assets.xcassets/iOS AppIcon.appiconset",
+ "source" : "geometry.svg",
+ "background" : "#FFFFFFFF",
+ "remove-alpha" : true
+}
+```
+
+### Set `set`
+
+![Image Set Examples from Xcode](/images/SetExample.png){:height="240"}
+
+A set is an image set or app icon used by Xcode.
+
+### Source `source`
+
+The image source file which could be a SVG or PNG file.
+
+### Geometry *optional* `geometry`
+
+The destination geometry of image if needed (i.e. image set). It must be in the format of:
+
+* *width* (ex. "128") - for specifying the width of the destination image
+* x*height* (ex. "x128") - for specifying the height of the destination image
+
+You can only specify the height or the width. The other dimension is automatically calculated based on the aspect ration of the image.
+
+### Background *optional* `background`
+
+As a requirement, **App Icons are required to exclude any alpha channels**. In order to remove a transparency from a source PNG or SVG file, you can specify to remove the alpha channel and add a background color.
+
+The background color can be set in a standard rgb, rgba, or hex code format (#RRGGBB or #AARRGGBB). If no alpha is specified an alpha of 1.0 is assumed.
+
+### Remove Alpha *optional* `remove-alpha`
+
+To specifically remove the alpha channel, a true boolean value must be specified. This will remove the alpha channel from the file. Make sure to specify an opaque background color when removing the alpha channel.
+
+## Xcode Integration and Automation
+
+With **Speculid**, the process of building image assets can be automated in **Xcode**.
+
+1. **Create the speculid file** and add it to your project folder as well as your source graphic files.
+
+ ![Xcode Target Membership](/images/XcodeTargetMembership.png)
+
+ * *Note: you don't need to add these files to any target membership*
+
+2. **Edit the speculid file.**
+
+ 1. **Add the property for the source** - the path to the SVG or PNG file.
+ ```json
+ {
+ "source" : "geometry.svg",
+ ...
+ }
+ ```
+ 1. **Add the property for the set** - the path to the Image Set or App Icon folder.
+ ```json
+ {
+ "set" : "Assets.xcassets/iOS AppIcon.appiconset",
+ ...
+ }
+ ```
+ 1. *optional* **Add the property for the geometry** - if this a conversion from a vector graphic (SVG) to an Image Set, you may want to supply the *1x* size.
+ ```json
+ {
+ "set" : "Assets.xcassets/Raster Image.imageset",
+ "source" : "layers.png",
+ "geometry" : "128"
+ }
+ ```
+ If you specify *128* in the *geometry* property, that means the width for the *1x* image will be *128 pixels*, the width for the *2x* image will be *256 pixels*, and the width for the *3x* image will be *384 pixels*. Heights will be calculated based on the aspect ratio of the SVG file.
+ Vector images in an image set will be converted to a iOS compatible PDF file.
+
+ 1. *optional* **Add the properties for the background color and alpha removal** - if this a conversion to an App Icon, you should remove any background transpareny and add a background color.
+ ```json
+ {
+ "set" : "Assets.xcassets/iOS AppIcon.appiconset",
+ "source" : "geometry.svg",
+ "background" : "#FFFFFFFF",
+ "remove-alpha" : true
+ }
+ ```
+
+ See the [file format section](#file-format) for more details.
+
+2. **Add the *Run Script* Build Phase** to the top of your project with the following code:
+
+ ```bash
+ find "${SRCROOT}" -name "*.speculid" -print0 |
+ while IFS= read -r -d $'\0' line; do
+ /Applications/Speculid/Contents/MacOS/Speculid --process "$line" &
+ done
+ wait
+ ```
+ ![Xcode Build Phase Run Script](/images/XcodeBuildPhaseRunScript.png)
+
+3. **Build the application.** This will create the graphics which you will use in your asset image set or app icon.
+
+ ![Xcode Unorganized Assets](/images/XcodeUnorganizedAssets.png)
+
+4. **After the first build**, drag the images to the correct asset slot. Each rendered image file is suffixed denoting its slot.
+
+ *(source file base name)*.*(size)*@*(scale)*~*(idiom)*.(extension)
+
+ **Examples**
+
+ * **logo.20x20@1x~ipad.png** - 20x20 size 1x scale for iPad
+ * **logo.60x60@3x~iphone.png** - 60x60 size 3x scale for iPhone
+ * **logo.83.5x83.5@2x~ipad.png** - 83.5x83.5 size 2x scale for iPad
+
+5. Build and Run. Done.
+
+-----
+
+**Speculid** ©2018, BrightDigit, LLC.
\ No newline at end of file
diff --git a/mstile-144x144.png b/mstile-144x144.png
new file mode 100644
index 00000000..b14e7fbd
Binary files /dev/null and b/mstile-144x144.png differ
diff --git a/mstile-150x150.png b/mstile-150x150.png
new file mode 100644
index 00000000..d4667d4e
Binary files /dev/null and b/mstile-150x150.png differ
diff --git a/mstile-310x150.png b/mstile-310x150.png
new file mode 100644
index 00000000..941ceaf9
Binary files /dev/null and b/mstile-310x150.png differ
diff --git a/mstile-310x310.png b/mstile-310x310.png
new file mode 100644
index 00000000..cb349895
Binary files /dev/null and b/mstile-310x310.png differ
diff --git a/mstile-70x70.png b/mstile-70x70.png
new file mode 100644
index 00000000..706d8877
Binary files /dev/null and b/mstile-70x70.png differ
diff --git a/safari-pinned-tab.svg b/safari-pinned-tab.svg
new file mode 100644
index 00000000..0863bc82
--- /dev/null
+++ b/safari-pinned-tab.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/scripts/readme.sh b/scripts/readme.sh
index 232285d3..56f8e5c9 100755
--- a/scripts/readme.sh
+++ b/scripts/readme.sh
@@ -1,6 +1,6 @@
#!/bin/sh
-SOURCE=gh-pages/README.md
+SOURCE=index.md
DESTINATION=README.md
cat $SOURCE | \
diff --git a/site.webmanifest b/site.webmanifest
new file mode 100644
index 00000000..b20abb7c
--- /dev/null
+++ b/site.webmanifest
@@ -0,0 +1,19 @@
+{
+ "name": "",
+ "short_name": "",
+ "icons": [
+ {
+ "src": "/android-chrome-192x192.png",
+ "sizes": "192x192",
+ "type": "image/png"
+ },
+ {
+ "src": "/android-chrome-512x512.png",
+ "sizes": "512x512",
+ "type": "image/png"
+ }
+ ],
+ "theme_color": "#ffffff",
+ "background_color": "#ffffff",
+ "display": "standalone"
+}