diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0023a53 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +/.build +/Packages +xcuserdata/ +DerivedData/ +.swiftpm/configuration/registries.json +.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +.netrc diff --git a/.src/tailwind.css b/.src/tailwind.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/.src/tailwind.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/.swiftpm/configuration/Package.resolved b/.swiftpm/configuration/Package.resolved new file mode 100644 index 0000000..d2d69c6 --- /dev/null +++ b/.swiftpm/configuration/Package.resolved @@ -0,0 +1,24 @@ +{ + "originHash" : "8419bb37e6c64d7f6c280f1c951af96cd992524c41c11e5413b2ba126152f3dd", + "pins" : [ + { + "identity" : "slipstream", + "kind" : "remoteSourceControl", + "location" : "https://github.com/jverkoey/slipstream.git", + "state" : { + "branch" : "main", + "revision" : "0187aeaac568fc745d543f32228525d9eb0837dd" + } + }, + { + "identity" : "swiftsoup", + "kind" : "remoteSourceControl", + "location" : "https://github.com/scinfu/SwiftSoup.git", + "state" : { + "revision" : "e2d11208519549c2e5798d70190472045633f22f", + "version" : "2.7.3" + } + } + ], + "version" : 3 +} diff --git a/.swiftpm/xcode/xcshareddata/xcschemes/jeffverkoeyen.com.xcscheme b/.swiftpm/xcode/xcshareddata/xcschemes/jeffverkoeyen.com.xcscheme new file mode 100644 index 0000000..6fdd099 --- /dev/null +++ b/.swiftpm/xcode/xcshareddata/xcschemes/jeffverkoeyen.com.xcscheme @@ -0,0 +1,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Package.swift b/Package.swift new file mode 100644 index 0000000..28b7012 --- /dev/null +++ b/Package.swift @@ -0,0 +1,20 @@ +// swift-tools-version: 6.0 +// The swift-tools-version declares the minimum version of Swift required to build this package. + +import PackageDescription + +let package = Package( + name: "jeffverkoeyen.com", + platforms: [ + .macOS("14"), + .iOS("17"), + ], + dependencies: [ + .package(url: "https://github.com/jverkoey/slipstream.git", branch: "main"), + ], + targets: [ + .executableTarget(name: "Site", dependencies: [ + .product(name: "Slipstream", package: "slipstream") + ]), + ] +) diff --git a/Sources/Site/main.swift b/Sources/Site/main.swift new file mode 100644 index 0000000..cce6ed7 --- /dev/null +++ b/Sources/Site/main.swift @@ -0,0 +1,207 @@ +import Foundation +import Slipstream + +struct SiteLink: View { + let text: String + let destination: URL? + + init(_ text: String, destination: URL?) { + self.text = text + self.destination = destination + } + + var body: some View { + Link(text, destination: destination) + .padding(4) + .padding(16, condition: .startingAt(.medium)) + .border( + .init(.zinc, darkness: 300), + edges: .right, + condition: .init(within: Breakpoint.small..\n" + renderHTML(Site()) +try output.write(to: projectRootURL.appending(path: "site/index.html"), atomically: true, encoding: .utf8) + +let process = Process() +let pipe = Pipe() +process.standardOutput = pipe +process.executableURL = URL(fileURLWithPath: "/bin/zsh") +process.environment = ["PATH": "/opt/homebrew/bin:/Applications/Xcode-beta.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"] +process.arguments = [ + "-c", + "cd \(projectRootURL.path(percentEncoded: false)) && npx tailwindcss -i .src/tailwind.css -o ./site/css/main.css --minify", +] + +try! process.run() +let data = pipe.fileHandleForReading.readDataToEndOfFile() + +guard let standardOutput = String(data: data, encoding: .utf8) else { + FileHandle.standardError.write(Data("Error in reading standard output data".utf8)) + fatalError() // or exit(EXIT_FAILURE) and equivalent + // or, you might want to handle it in some other way instead of a crash +} + +print(standardOutput) + + + +//module.exports = { +// content: [ +// "./index.html", +// "./privacy-policy/*.html", +// "./scanning/*.html", +// "./scanning/extended-pids/*.html", +// "./scanning/repo-status/*.html", +// "./shortcuts/*.html" +// ], +// darkMode: 'media', +// theme: { +// extend: { +// colors: { +// 'sidecar-gray': '#262625', +// } +// }, +// fontFamily: { +// 'rounded': ['ui-rounded', '-apple-system', 'system-ui', 'BlinkMacSystemFont', '"Segoe UI"', 'Roboto', '"Helvetica Neue"', 'Arial', 'sans-serif'] +// }, +// container: { +// center: true +// }, +// screens: { +// 'sm': '375px', +// 'md': '900px', +// } +// }, +// plugins: [], +//} diff --git a/index.html b/index.html deleted file mode 100644 index 17f55a3..0000000 --- a/index.html +++ /dev/null @@ -1,51 +0,0 @@ - - - - - featherless software design - - - - - - - - -
-
- -
-

featherless
software design

-
- -
-
-

portfolio

-
-
-

blog

-
-
-

contact

-
-
-

about

-
-
- -
-
- - - - diff --git a/about/index.html b/site/about/index.html similarity index 100% rename from about/index.html rename to site/about/index.html diff --git a/contact/index.html b/site/contact/index.html similarity index 100% rename from contact/index.html rename to site/contact/index.html diff --git a/css/bootstrap-responsive.css b/site/css/bootstrap-responsive.css similarity index 100% rename from css/bootstrap-responsive.css rename to site/css/bootstrap-responsive.css diff --git a/css/bootstrap-responsive.min.css b/site/css/bootstrap-responsive.min.css similarity index 100% rename from css/bootstrap-responsive.min.css rename to site/css/bootstrap-responsive.min.css diff --git a/css/bootstrap.css b/site/css/bootstrap.css similarity index 100% rename from css/bootstrap.css rename to site/css/bootstrap.css diff --git a/css/bootstrap.min.css b/site/css/bootstrap.min.css similarity index 100% rename from css/bootstrap.min.css rename to site/css/bootstrap.min.css diff --git a/site/css/main.css b/site/css/main.css new file mode 100644 index 0000000..a85b850 --- /dev/null +++ b/site/css/main.css @@ -0,0 +1 @@ +/*! tailwindcss v3.4.4 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{-webkit-text-size-adjust:100%;font-feature-settings:normal;-webkit-tap-highlight-color:transparent;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-variation-settings:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4}body{line-height:inherit;margin:0}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-feature-settings:normal;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:initial}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{font-feature-settings:inherit;color:inherit;font-family:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:initial;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:initial}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]{display:none}*,::backdrop,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:#3b82f680;--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }.container{margin-left:auto;margin-right:auto;width:100%}@media (min-width:375px){.container{max-width:375px}}@media (min-width:900px){.container{max-width:900px}}.ml-11{margin-left:2.75rem}.inline{display:inline}.flex{display:flex}.table{display:table}.flex-col{flex-direction:column}.items-end{align-items:flex-end}.justify-center{justify-content:center}.gap-y-2{row-gap:.5rem}.bg-\[url\(\'\/gfx\/feather\.svg\'\)\]{background-image:url(/gfx/feather.svg)}.bg-\[length\:184px_184px\]{background-size:184px 184px}.bg-no-repeat{background-repeat:no-repeat}.p-1{padding:.25rem}.pb-4{padding-bottom:1rem}.pt-20{padding-top:5rem}.text-right{text-align:right}.font-rounded{font-family:ui-rounded,-apple-system,system-ui,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif}.text-3xl{font-size:1.875rem;line-height:2.25rem}.text-4xl{font-size:2.25rem;line-height:2.5rem}.font-light{font-weight:300}.text-zinc-950{--tw-text-opacity:1;color:rgb(9 9 11/var(--tw-text-opacity))}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}@media (min-width:375px){@media not all and (min-width:900px){.sm\:max-md\:hover\:border-r:hover{border-right-width:1px}.sm\:max-md\:hover\:border-zinc-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}}}@media (min-width:900px){.md\:mx-auto{margin-left:auto;margin-right:auto}.md\:flex-row{flex-direction:row}.md\:items-start{align-items:flex-start}.md\:gap-x-2{-moz-column-gap:.5rem;column-gap:.5rem}.md\:bg-\[url\(\'\/gfx\/feather\.svg\'\)\]{background-image:url(/gfx/feather.svg)}.md\:bg-\[length\:256px_256px\]{background-size:256px 256px}.md\:p-4{padding:1rem}.md\:pb-0{padding-bottom:0}.md\:pl-36{padding-left:9rem}.md\:pr-12{padding-right:3rem}.md\:pt-32{padding-top:8rem}.md\:text-center{text-align:center}.md\:text-5xl{font-size:3rem;line-height:1}.md\:hover\:border-b:hover{border-bottom-width:1px}.md\:hover\:border-zinc-300:hover{--tw-border-opacity:1;border-color:rgb(212 212 216/var(--tw-border-opacity))}} \ No newline at end of file diff --git a/css/portfolio.css b/site/css/portfolio.css similarity index 100% rename from css/portfolio.css rename to site/css/portfolio.css diff --git a/gfx/appstore.svg b/site/gfx/appstore.svg similarity index 100% rename from gfx/appstore.svg rename to site/gfx/appstore.svg diff --git a/gfx/feather.svg b/site/gfx/feather.svg similarity index 100% rename from gfx/feather.svg rename to site/gfx/feather.svg diff --git a/gfx/glyphicons-halflings-white.png b/site/gfx/glyphicons-halflings-white.png similarity index 100% rename from gfx/glyphicons-halflings-white.png rename to site/gfx/glyphicons-halflings-white.png diff --git a/gfx/glyphicons-halflings.png b/site/gfx/glyphicons-halflings.png similarity index 100% rename from gfx/glyphicons-halflings.png rename to site/gfx/glyphicons-halflings.png diff --git a/gfx/gmm_background_tile.png b/site/gfx/gmm_background_tile.png similarity index 100% rename from gfx/gmm_background_tile.png rename to site/gfx/gmm_background_tile.png diff --git a/gfx/gmm_background_tile@2x.png b/site/gfx/gmm_background_tile@2x.png similarity index 100% rename from gfx/gmm_background_tile@2x.png rename to site/gfx/gmm_background_tile@2x.png diff --git a/gfx/gmm_icon.png b/site/gfx/gmm_icon.png similarity index 100% rename from gfx/gmm_icon.png rename to site/gfx/gmm_icon.png diff --git a/gfx/gmm_icon@2x.png b/site/gfx/gmm_icon@2x.png similarity index 100% rename from gfx/gmm_icon@2x.png rename to site/gfx/gmm_icon@2x.png diff --git a/gfx/nimbus128.png b/site/gfx/nimbus128.png similarity index 100% rename from gfx/nimbus128.png rename to site/gfx/nimbus128.png diff --git a/gfx/pixelheart.png b/site/gfx/pixelheart.png similarity index 100% rename from gfx/pixelheart.png rename to site/gfx/pixelheart.png diff --git a/gfx/pixelheart_anim1.gif b/site/gfx/pixelheart_anim1.gif similarity index 100% rename from gfx/pixelheart_anim1.gif rename to site/gfx/pixelheart_anim1.gif diff --git a/gfx/pixelheart_anim2.gif b/site/gfx/pixelheart_anim2.gif similarity index 100% rename from gfx/pixelheart_anim2.gif rename to site/gfx/pixelheart_anim2.gif diff --git a/gfx/pixelheart_anim3.gif b/site/gfx/pixelheart_anim3.gif similarity index 100% rename from gfx/pixelheart_anim3.gif rename to site/gfx/pixelheart_anim3.gif diff --git a/gfx/pixelheart_anim4.gif b/site/gfx/pixelheart_anim4.gif similarity index 100% rename from gfx/pixelheart_anim4.gif rename to site/gfx/pixelheart_anim4.gif diff --git a/gfx/twitter.png b/site/gfx/twitter.png similarity index 100% rename from gfx/twitter.png rename to site/gfx/twitter.png diff --git a/gfx/webby.png b/site/gfx/webby.png similarity index 100% rename from gfx/webby.png rename to site/gfx/webby.png diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..0caa401 --- /dev/null +++ b/site/index.html @@ -0,0 +1,25 @@ + + + + + featherless software design + + + + + + + +
+
+

featherless
software design

+ +
+
+ + \ No newline at end of file diff --git a/js/bootstrap.js b/site/js/bootstrap.js similarity index 100% rename from js/bootstrap.js rename to site/js/bootstrap.js diff --git a/js/bootstrap.min.js b/site/js/bootstrap.min.js similarity index 100% rename from js/bootstrap.min.js rename to site/js/bootstrap.min.js diff --git a/js/jquery-2.0.3.min.map b/site/js/jquery-2.0.3.min.map similarity index 100% rename from js/jquery-2.0.3.min.map rename to site/js/jquery-2.0.3.min.map diff --git a/js/jquery.min.js b/site/js/jquery.min.js similarity index 100% rename from js/jquery.min.js rename to site/js/jquery.min.js diff --git a/js/portfolio.js b/site/js/portfolio.js similarity index 100% rename from js/portfolio.js rename to site/js/portfolio.js diff --git a/portfolio/index.html b/site/portfolio/index.html similarity index 100% rename from portfolio/index.html rename to site/portfolio/index.html diff --git a/portfolio/pixelheart/pixelheart.mov b/site/portfolio/pixelheart/pixelheart.mov similarity index 100% rename from portfolio/pixelheart/pixelheart.mov rename to site/portfolio/pixelheart/pixelheart.mov diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..673b290 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,18 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: ["./**/*.html"], + theme: { + extend: {}, + fontFamily: { + 'rounded': ['ui-rounded', '-apple-system', 'system-ui', 'BlinkMacSystemFont', '"Segoe UI"', 'Roboto', '"Helvetica Neue"', 'Arial', 'sans-serif'] + }, + container: { + center: true + }, + screens: { + 'sm': '375px', + 'md': '900px', + } + }, + plugins: [], +} \ No newline at end of file