mirror of
https://github.com/runyanjake/jakesphotos.git
synced 2026-03-26 05:23:18 -07:00
Rewrite as bring-your-own-markdown website generator
This commit is contained in:
parent
2456040d9d
commit
ffa0a46213
17
build/asset-manifest.json
Normal file
17
build/asset-manifest.json
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"files": {
|
||||||
|
"main.css": "/static/css/main.39fd778a.css",
|
||||||
|
"main.js": "/static/js/main.fd3a90d8.js",
|
||||||
|
"static/js/488.9561f9b8.chunk.js": "/static/js/488.9561f9b8.chunk.js",
|
||||||
|
"static/media/instagram-light.png": "/static/media/instagram-light.2173f1e5eaee4fd6d94f.png",
|
||||||
|
"static/media/instagram-dark.png": "/static/media/instagram-dark.60be80b890ecf588309c.png",
|
||||||
|
"index.html": "/index.html",
|
||||||
|
"main.39fd778a.css.map": "/static/css/main.39fd778a.css.map",
|
||||||
|
"main.fd3a90d8.js.map": "/static/js/main.fd3a90d8.js.map",
|
||||||
|
"488.9561f9b8.chunk.js.map": "/static/js/488.9561f9b8.chunk.js.map"
|
||||||
|
},
|
||||||
|
"entrypoints": [
|
||||||
|
"static/css/main.39fd778a.css",
|
||||||
|
"static/js/main.fd3a90d8.js"
|
||||||
|
]
|
||||||
|
}
|
||||||
BIN
build/favicon.ico
Normal file
BIN
build/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 3.8 KiB |
1
build/index.html
Normal file
1
build/index.html
Normal file
@ -0,0 +1 @@
|
|||||||
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="Web site created using create-react-app"/><link rel="apple-touch-icon" href="/logo192.png"/><link rel="manifest" href="/manifest.json"/><title>React App</title><script defer="defer" src="/static/js/main.fd3a90d8.js"></script><link href="/static/css/main.39fd778a.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
|
||||||
BIN
build/logo192.png
Normal file
BIN
build/logo192.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.2 KiB |
BIN
build/logo512.png
Normal file
BIN
build/logo512.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.4 KiB |
25
build/manifest.json
Normal file
25
build/manifest.json
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
{
|
||||||
|
"short_name": "React App",
|
||||||
|
"name": "Create React App Sample",
|
||||||
|
"icons": [
|
||||||
|
{
|
||||||
|
"src": "favicon.ico",
|
||||||
|
"sizes": "64x64 32x32 24x24 16x16",
|
||||||
|
"type": "image/x-icon"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "logo192.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "192x192"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"src": "logo512.png",
|
||||||
|
"type": "image/png",
|
||||||
|
"sizes": "512x512"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"start_url": ".",
|
||||||
|
"display": "standalone",
|
||||||
|
"theme_color": "#000000",
|
||||||
|
"background_color": "#ffffff"
|
||||||
|
}
|
||||||
3
build/robots.txt
Normal file
3
build/robots.txt
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# https://www.robotstxt.org/robotstxt.html
|
||||||
|
User-agent: *
|
||||||
|
Disallow:
|
||||||
2
build/static/css/main.39fd778a.css
Normal file
2
build/static/css/main.39fd778a.css
Normal file
File diff suppressed because one or more lines are too long
1
build/static/css/main.39fd778a.css.map
Normal file
1
build/static/css/main.39fd778a.css.map
Normal file
File diff suppressed because one or more lines are too long
2
build/static/js/488.9561f9b8.chunk.js
Normal file
2
build/static/js/488.9561f9b8.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
build/static/js/488.9561f9b8.chunk.js.map
Normal file
1
build/static/js/488.9561f9b8.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
3
build/static/js/main.fd3a90d8.js
Normal file
3
build/static/js/main.fd3a90d8.js
Normal file
File diff suppressed because one or more lines are too long
86
build/static/js/main.fd3a90d8.js.LICENSE.txt
Normal file
86
build/static/js/main.fd3a90d8.js.LICENSE.txt
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
/*
|
||||||
|
object-assign
|
||||||
|
(c) Sindre Sorhus
|
||||||
|
@license MIT
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Masonry v4.2.2
|
||||||
|
* Cascading grid layout library
|
||||||
|
* https://masonry.desandro.com
|
||||||
|
* MIT License
|
||||||
|
* by David DeSandro
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* Outlayer v2.1.1
|
||||||
|
* the brains and guts of a layout library
|
||||||
|
* MIT license
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*!
|
||||||
|
* getSize v2.0.3
|
||||||
|
* measure size of elements
|
||||||
|
* MIT license
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @license React
|
||||||
|
* react-dom-client.production.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @license React
|
||||||
|
* react-dom.production.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @license React
|
||||||
|
* react-jsx-runtime.production.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @license React
|
||||||
|
* react.production.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @license React
|
||||||
|
* scheduler.production.js
|
||||||
|
*
|
||||||
|
* Copyright (c) Meta Platforms, Inc. and affiliates.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE file in the root directory of this source tree.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* react-router v7.1.1
|
||||||
|
*
|
||||||
|
* Copyright (c) Remix Software Inc.
|
||||||
|
*
|
||||||
|
* This source code is licensed under the MIT license found in the
|
||||||
|
* LICENSE.md file in the root directory of this source tree.
|
||||||
|
*
|
||||||
|
* @license MIT
|
||||||
|
*/
|
||||||
1
build/static/js/main.fd3a90d8.js.map
Normal file
1
build/static/js/main.fd3a90d8.js.map
Normal file
File diff suppressed because one or more lines are too long
BIN
build/static/media/instagram-dark.60be80b890ecf588309c.png
Normal file
BIN
build/static/media/instagram-dark.60be80b890ecf588309c.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
BIN
build/static/media/instagram-light.2173f1e5eaee4fd6d94f.png
Normal file
BIN
build/static/media/instagram-light.2173f1e5eaee4fd6d94f.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
13
content/_config.json
Normal file
13
content/_config.json
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"siteTitle": "Jake Runyan Photography",
|
||||||
|
"footerCopyright": "Jake Runyan",
|
||||||
|
"nav": [
|
||||||
|
{ "label": "Gallery", "path": "/gallery" },
|
||||||
|
{ "label": "Contact", "path": "/contact" },
|
||||||
|
{ "label": "About", "path": "/about" }
|
||||||
|
],
|
||||||
|
"social": [
|
||||||
|
{ "label": "Instagram", "url": "https://www.instagram.com/jakerunyanphotography", "icon": "instagram" },
|
||||||
|
{ "label": "GitHub", "url": "https://github.com/runyanjake/jakesphotos", "icon": "github" }
|
||||||
|
]
|
||||||
|
}
|
||||||
11
content/about/index.md
Normal file
11
content/about/index.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
---
|
||||||
|
template: default
|
||||||
|
title: About Me
|
||||||
|
profileImage: https://gallery.whitney.rip/api/v1/t/287329d8835b299400819437c9c2a2d192041159/2tdm690t/fit_4096
|
||||||
|
---
|
||||||
|
|
||||||
|
I'm Jake, a small time photographer out of the Bay Area. I started shooting as a kid on my dad's old Canon EOS 60D, and now have graduated to owning my own gear. Having an artistic outlet has always been a force of balance for me, and with a background in video and photo editing, this has been a fun one.
|
||||||
|
|
||||||
|
My current setup is a Sony Alpha 6300 with a 27mm pancake lens. This budget setup was perfect for bringing my camera along on bike rides, as cycling is another hobby. You can find me on Youtube as Jake's West Coast. My current photography interests include capturing the beauty of the Bay Area and California coast on our bike rides, as well as moments in my everyday life.
|
||||||
|
|
||||||
|
If you'd like to learn more about Jake, the person, you can find more at my instagram @runyanjake or on my personal website jake.runyan.dev.
|
||||||
6
content/contact/index.md
Normal file
6
content/contact/index.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
template: contact
|
||||||
|
title: Contact Me
|
||||||
|
email: jake@runyan.dev
|
||||||
|
instagram: jakerunyanphotography
|
||||||
|
---
|
||||||
21
content/gallery/index.md
Normal file
21
content/gallery/index.md
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
---
|
||||||
|
template: menu
|
||||||
|
title: Gallery
|
||||||
|
description: Browse my photo collections
|
||||||
|
---
|
||||||
|
|
||||||
|
## [Landscapes](/gallery/landscapes)
|
||||||
|

|
||||||
|
Mountains, coastal cliffs, and open skies across California and the Bay Area.
|
||||||
|
|
||||||
|
## [Portraits](/gallery/portraits)
|
||||||
|

|
||||||
|
Candid moments and faces from everyday life.
|
||||||
|
|
||||||
|
## [Textures](/gallery/textures)
|
||||||
|

|
||||||
|
Abstract surfaces and patterns found in the world around us.
|
||||||
|
|
||||||
|
## [Nature](/gallery/nature)
|
||||||
|

|
||||||
|
Flora, fauna, and natural forms.
|
||||||
22
content/gallery/landscapes/images.json
Normal file
22
content/gallery/landscapes/images.json
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
[
|
||||||
|
"https://images.whitney.rip/api/assets/d14fcd1e-5479-4312-ae39-055283c8fd75/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1114e4b3-99a7-4cdc-9ce2-ad52d1a0046f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1ce61b59-98a7-401c-9840-72dc51822494/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2250e289-03ae-4ee4-a63a-3ba29db99dd0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ec93e5f8-ca2e-4078-8190-d884435513eb/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/40cb4952-0b8a-4500-a692-a20acbe01ff4/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2fe3919e-00d4-4afc-8140-a81dbf266c82/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/3a89717a-b0b9-42a6-ab34-0f4dc3d90987/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8beaf017-029f-4827-a3c2-066f9453e271/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/87cd7f35-f4c5-4a1e-a56d-c6d8e9d082da/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2c55949d-7a2d-4bde-a87e-107ce352bc60/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/44f3ce06-3b34-42d2-9396-424ff95ba672/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d88e4a71-d645-48de-9b22-aad8f1ae3bde/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d84b166b-56fc-48cb-b932-7847d70ade04/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/01d40f57-dbf6-4c9d-8fc1-0ac22dfe17e5/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e7055bf2-626a-47a5-9526-15b2de26249e/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/7635d87d-5ed6-4342-9cc2-0c6d0e0a1425/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0beaaf50-cb2c-4d84-b099-e1af24f7d2e3/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/90052323-c4df-4820-8fe8-7658424991b8/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4749cdd5-aa5a-4911-9567-f3f5afca6ecc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D"
|
||||||
|
]
|
||||||
4
content/gallery/landscapes/index.md
Normal file
4
content/gallery/landscapes/index.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
template: gallery
|
||||||
|
title: Landscapes
|
||||||
|
---
|
||||||
21
content/gallery/nature/images.json
Normal file
21
content/gallery/nature/images.json
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
[
|
||||||
|
"https://images.whitney.rip/api/assets/18e59afb-8d23-433d-9f91-fb78d6efc729/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/72d0e30d-c27c-4d8e-8977-0ae438178324/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d496de3c-bf3a-4b49-a34a-96c998c288a0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fd4b8886-7a55-478e-8bc8-6cba70fe9cd2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/30b56b85-3225-44df-903d-5ba14e07927c/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/185d198a-a2d3-40f1-b508-11d03edf8162/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/92063a5c-0c50-46c1-9bb3-8c294305b5a7/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2fb5267d-7b71-4612-ad9c-4be961704a67/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4d0fbaa8-90c2-4a46-9b32-d463fac24ba1/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/bb8cf2fc-a745-4ff9-87a3-51a5407de9a3/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/abefba8f-c77e-46e7-9f62-9a3da5ec8128/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d9fc53c6-4645-4451-91d5-94927ff638ea/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ddf6d29e-81f4-4c3b-8277-450a88b0d75f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/b66557e8-aa4a-4f0b-b252-ee0ece28b0b5/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8f6df2db-6a63-446b-9c00-5830ff91ea5c/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/00d4ad2e-d549-45ac-9a7c-d9f97cc2a0ba/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/97e8aa93-39fb-42d9-b1e0-0536eb81e4ba/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0eef2205-2260-4307-80fa-520aeb139558/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0fe37f58-c2c6-4007-ae6d-0230ab4a7507/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D"
|
||||||
|
]
|
||||||
4
content/gallery/nature/index.md
Normal file
4
content/gallery/nature/index.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
template: gallery
|
||||||
|
title: Nature
|
||||||
|
---
|
||||||
22
content/gallery/portraits/images.json
Normal file
22
content/gallery/portraits/images.json
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
[
|
||||||
|
"https://images.whitney.rip/api/assets/f4c18690-b0fe-4ed1-a1d7-ea49b8828aa6/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1a8dd56a-3433-40ab-8619-f385560ee807/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fe1b66b4-4f98-43a3-bb26-6d4661d5ffe2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/787274d8-d94b-479c-9a11-b60f3ca3e640/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/91d11918-7471-4e81-b101-23511e14f45d/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/bfa43b2b-4aa1-4792-ab2f-aff1e226cdf0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/30273029-cba9-45a6-aa7c-3af27d0bd835/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/f7bfc5b1-6ef6-42ce-b4a2-237939b03ae9/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e29ce2a5-987c-4453-81f2-b2e7b161e7d2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/3082f0af-fb30-4e04-baae-5b47d310e380/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/15dd24ba-e2ae-4093-a098-988aac86e1e0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fc6c3d20-2521-4d31-9f31-19476ad30a65/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8a750cc3-7bef-4bc6-9727-83151dead578/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4db2ea6d-8998-40df-bf05-fc27beeb2085/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ec92f32f-0c08-4317-b8e2-90c53c2e6416/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/7d5803ea-20b9-448f-9659-6fb801f15c68/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/dfb53a18-05dc-4cbc-bdd2-7f8b6f5a4e8e/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e6934d1a-543c-4ed8-9c29-a94e915f9d94/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0e88d871-fc8e-4ac3-a96a-920fce3cc546/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/379a3b92-ff9b-4455-afe7-c2c6a8a270cd/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D"
|
||||||
|
]
|
||||||
4
content/gallery/portraits/index.md
Normal file
4
content/gallery/portraits/index.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
template: gallery
|
||||||
|
title: Portraits
|
||||||
|
---
|
||||||
22
content/gallery/textures/images.json
Normal file
22
content/gallery/textures/images.json
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
[
|
||||||
|
"https://images.whitney.rip/api/assets/e03f66a6-a619-4624-a473-860026b3446a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4d759c78-64c8-4607-9b61-7d1f536fe98f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0ff98add-0a3c-408b-af91-6320df62910f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ce5eba3e-c444-4a20-a88a-92bfe56c6891/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/a837364d-ed8a-44cf-a8db-8db320bf81e6/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8e254f41-7b14-48b3-ba98-a96fb9c05129/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1f877a0c-8e36-4751-b50a-5ea12c73aefc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1979efcd-ba01-4194-b0f7-8e64a996c1cc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/f4fcf415-7eb1-4131-8ef8-b0456aa31c62/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4e440673-7294-48ac-99a4-05cc3fb07cd2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/62baec73-487d-4a72-bdc4-7c168cf6f82a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/88cd4904-2ab1-4c60-b225-58d73945d724/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/dd59bec7-d922-4a53-af12-3f252c109d0d/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d33762bc-1204-4f33-8e6f-2ea5bde72f1a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fe4c9bf0-334b-40fb-9a44-8b1984e2818a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/993736e1-a3ae-4ec5-8c67-c25c4c734f23/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/038e8d18-87cd-49f4-8e53-4c36a5f76cfb/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/994408ea-6f04-473f-84ea-de3c77265298/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ddaf8248-7cdf-4e39-9639-d2826dc9d038/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/214921e1-7b75-4059-ad53-1c1062f6df45/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D"
|
||||||
|
]
|
||||||
4
content/gallery/textures/index.md
Normal file
4
content/gallery/textures/index.md
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
template: gallery
|
||||||
|
title: Textures
|
||||||
|
---
|
||||||
81
content/images.json
Normal file
81
content/images.json
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
[
|
||||||
|
"https://images.whitney.rip/api/assets/d14fcd1e-5479-4312-ae39-055283c8fd75/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1114e4b3-99a7-4cdc-9ce2-ad52d1a0046f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1ce61b59-98a7-401c-9840-72dc51822494/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2250e289-03ae-4ee4-a63a-3ba29db99dd0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ec93e5f8-ca2e-4078-8190-d884435513eb/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/40cb4952-0b8a-4500-a692-a20acbe01ff4/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2fe3919e-00d4-4afc-8140-a81dbf266c82/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/3a89717a-b0b9-42a6-ab34-0f4dc3d90987/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8beaf017-029f-4827-a3c2-066f9453e271/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/87cd7f35-f4c5-4a1e-a56d-c6d8e9d082da/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2c55949d-7a2d-4bde-a87e-107ce352bc60/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/44f3ce06-3b34-42d2-9396-424ff95ba672/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d88e4a71-d645-48de-9b22-aad8f1ae3bde/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d84b166b-56fc-48cb-b932-7847d70ade04/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/01d40f57-dbf6-4c9d-8fc1-0ac22dfe17e5/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e7055bf2-626a-47a5-9526-15b2de26249e/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/7635d87d-5ed6-4342-9cc2-0c6d0e0a1425/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0beaaf50-cb2c-4d84-b099-e1af24f7d2e3/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/90052323-c4df-4820-8fe8-7658424991b8/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4749cdd5-aa5a-4911-9567-f3f5afca6ecc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/f4c18690-b0fe-4ed1-a1d7-ea49b8828aa6/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1a8dd56a-3433-40ab-8619-f385560ee807/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fe1b66b4-4f98-43a3-bb26-6d4661d5ffe2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/787274d8-d94b-479c-9a11-b60f3ca3e640/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/91d11918-7471-4e81-b101-23511e14f45d/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/bfa43b2b-4aa1-4792-ab2f-aff1e226cdf0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/30273029-cba9-45a6-aa7c-3af27d0bd835/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/f7bfc5b1-6ef6-42ce-b4a2-237939b03ae9/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e29ce2a5-987c-4453-81f2-b2e7b161e7d2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/3082f0af-fb30-4e04-baae-5b47d310e380/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/15dd24ba-e2ae-4093-a098-988aac86e1e0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fc6c3d20-2521-4d31-9f31-19476ad30a65/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8a750cc3-7bef-4bc6-9727-83151dead578/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4db2ea6d-8998-40df-bf05-fc27beeb2085/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ec92f32f-0c08-4317-b8e2-90c53c2e6416/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/7d5803ea-20b9-448f-9659-6fb801f15c68/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/dfb53a18-05dc-4cbc-bdd2-7f8b6f5a4e8e/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e6934d1a-543c-4ed8-9c29-a94e915f9d94/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0e88d871-fc8e-4ac3-a96a-920fce3cc546/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/379a3b92-ff9b-4455-afe7-c2c6a8a270cd/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e03f66a6-a619-4624-a473-860026b3446a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4d759c78-64c8-4607-9b61-7d1f536fe98f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0ff98add-0a3c-408b-af91-6320df62910f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ce5eba3e-c444-4a20-a88a-92bfe56c6891/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/a837364d-ed8a-44cf-a8db-8db320bf81e6/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8e254f41-7b14-48b3-ba98-a96fb9c05129/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1f877a0c-8e36-4751-b50a-5ea12c73aefc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1979efcd-ba01-4194-b0f7-8e64a996c1cc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/f4fcf415-7eb1-4131-8ef8-b0456aa31c62/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4e440673-7294-48ac-99a4-05cc3fb07cd2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/62baec73-487d-4a72-bdc4-7c168cf6f82a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/88cd4904-2ab1-4c60-b225-58d73945d724/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/dd59bec7-d922-4a53-af12-3f252c109d0d/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d33762bc-1204-4f33-8e6f-2ea5bde72f1a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fe4c9bf0-334b-40fb-9a44-8b1984e2818a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/993736e1-a3ae-4ec5-8c67-c25c4c734f23/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/038e8d18-87cd-49f4-8e53-4c36a5f76cfb/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/994408ea-6f04-473f-84ea-de3c77265298/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ddaf8248-7cdf-4e39-9639-d2826dc9d038/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/214921e1-7b75-4059-ad53-1c1062f6df45/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/18e59afb-8d23-433d-9f91-fb78d6efc729/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/72d0e30d-c27c-4d8e-8977-0ae438178324/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d496de3c-bf3a-4b49-a34a-96c998c288a0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fd4b8886-7a55-478e-8bc8-6cba70fe9cd2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/30b56b85-3225-44df-903d-5ba14e07927c/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/185d198a-a2d3-40f1-b508-11d03edf8162/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/92063a5c-0c50-46c1-9bb3-8c294305b5a7/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2fb5267d-7b71-4612-ad9c-4be961704a67/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4d0fbaa8-90c2-4a46-9b32-d463fac24ba1/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/bb8cf2fc-a745-4ff9-87a3-51a5407de9a3/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/abefba8f-c77e-46e7-9f62-9a3da5ec8128/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d9fc53c6-4645-4451-91d5-94927ff638ea/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ddf6d29e-81f4-4c3b-8277-450a88b0d75f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/b66557e8-aa4a-4f0b-b252-ee0ece28b0b5/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8f6df2db-6a63-446b-9c00-5830ff91ea5c/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/00d4ad2e-d549-45ac-9a7c-d9f97cc2a0ba/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/97e8aa93-39fb-42d9-b1e0-0536eb81e4ba/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0eef2205-2260-4307-80fa-520aeb139558/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0fe37f58-c2c6-4007-ae6d-0230ab4a7507/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D"
|
||||||
|
]
|
||||||
17
content/index.md
Normal file
17
content/index.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
template: homepage
|
||||||
|
title: Jake Runyan Photography
|
||||||
|
subtitle: Bay Area · Cycling · Life
|
||||||
|
---
|
||||||
|
|
||||||
|
## Bay Area Life
|
||||||
|

|
||||||
|
I'm Jake, a small-time photographer out of the Bay Area. I shoot the world around me — the coastlines, the hills, the everyday scenes that make this place feel like home.
|
||||||
|
|
||||||
|
## On Two Wheels
|
||||||
|

|
||||||
|
My Sony Alpha 6300 comes along on every ride. There's something about cycling that puts you right in the middle of a scene — no glass between you and the world.
|
||||||
|
|
||||||
|
## Everyday Moments
|
||||||
|

|
||||||
|
Beyond landscapes, it's the small details that catch my eye — textures, light, the quiet moments between everything else.
|
||||||
1380
package-lock.json
generated
1380
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
15
package.json
15
package.json
@ -8,11 +8,14 @@
|
|||||||
"react": "^19.0.0",
|
"react": "^19.0.0",
|
||||||
"react-dom": "^19.0.0",
|
"react-dom": "^19.0.0",
|
||||||
"react-helmet": "^6.1.0",
|
"react-helmet": "^6.1.0",
|
||||||
|
"react-markdown": "^9.1.0",
|
||||||
"react-router-dom": "^7.1.1",
|
"react-router-dom": "^7.1.1",
|
||||||
"react-scripts": "5.0.1",
|
"react-scripts": "5.0.1",
|
||||||
"web-vitals": "^4.2.4"
|
"web-vitals": "^4.2.4"
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"prebuild": "node scripts/build-content.js",
|
||||||
|
"prestart": "node scripts/build-content.js",
|
||||||
"start": "react-scripts start",
|
"start": "react-scripts start",
|
||||||
"build": "react-scripts build",
|
"build": "react-scripts build",
|
||||||
"test": "react-scripts test",
|
"test": "react-scripts test",
|
||||||
@ -35,5 +38,17 @@
|
|||||||
"last 1 firefox version",
|
"last 1 firefox version",
|
||||||
"last 1 safari version"
|
"last 1 safari version"
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@testing-library/jest-dom": "^6.9.1",
|
||||||
|
"@testing-library/react": "^16.3.2",
|
||||||
|
"@testing-library/user-event": "^14.6.1"
|
||||||
|
},
|
||||||
|
"jest": {
|
||||||
|
"moduleNameMapper": {
|
||||||
|
"^react-router-dom$": "<rootDir>/node_modules/react-router-dom/dist/index.js",
|
||||||
|
"^react-router$": "<rootDir>/node_modules/react-router/dist/development/index.js",
|
||||||
|
"^react-router/dom$": "<rootDir>/node_modules/react-router/dist/development/dom-export.js"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
95
scripts/build-content.js
Normal file
95
scripts/build-content.js
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
/**
|
||||||
|
* Prebuild script: reads content/ files and generates src/generated/content.js
|
||||||
|
* Run automatically via npm prestart / prebuild hooks.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const fs = require('fs');
|
||||||
|
const path = require('path');
|
||||||
|
|
||||||
|
const CONTENT_DIR = path.resolve(__dirname, '../content');
|
||||||
|
const OUTPUT_FILE = path.resolve(__dirname, '../src/generated/content.js');
|
||||||
|
|
||||||
|
// --- Frontmatter parser ---
|
||||||
|
function parseFrontmatter(raw) {
|
||||||
|
const match = raw.match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n)?([\s\S]*)$/);
|
||||||
|
if (!match) return { frontmatter: {}, content: raw.trim() };
|
||||||
|
|
||||||
|
const lines = match[1].split('\n');
|
||||||
|
const frontmatter = {};
|
||||||
|
for (const line of lines) {
|
||||||
|
const m = line.match(/^(\w[\w-]*)\s*:\s*(.*)/);
|
||||||
|
if (m) frontmatter[m[1]] = m[2].trim();
|
||||||
|
}
|
||||||
|
return { frontmatter, content: match[2].trim() };
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Route derivation ---
|
||||||
|
function routeFromDir(dirName) {
|
||||||
|
// content/index.md -> /
|
||||||
|
// content/about/index.md -> /about
|
||||||
|
if (dirName === '') return '/';
|
||||||
|
return '/' + dirName;
|
||||||
|
}
|
||||||
|
|
||||||
|
// --- Load site config ---
|
||||||
|
const configPath = path.join(CONTENT_DIR, '_config.json');
|
||||||
|
if (!fs.existsSync(configPath)) {
|
||||||
|
console.error('Missing content/_config.json');
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
const siteConfig = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
||||||
|
|
||||||
|
// --- Discover page dirs ---
|
||||||
|
// Root-level index.md lives directly in content/
|
||||||
|
// Subdir index.md lives in content/<slug>/
|
||||||
|
const pages = {};
|
||||||
|
|
||||||
|
function processDir(dirPath, slug) {
|
||||||
|
const indexPath = path.join(dirPath, 'index.md');
|
||||||
|
if (!fs.existsSync(indexPath)) return;
|
||||||
|
|
||||||
|
const raw = fs.readFileSync(indexPath, 'utf8');
|
||||||
|
const { frontmatter, content } = parseFrontmatter(raw);
|
||||||
|
|
||||||
|
// Resolve images: check dirPath/images.json first, then dirPath/images/ subfolder
|
||||||
|
let images = [];
|
||||||
|
const localImagesJsonPath = path.join(dirPath, 'images.json');
|
||||||
|
if (fs.existsSync(localImagesJsonPath)) {
|
||||||
|
images = JSON.parse(fs.readFileSync(localImagesJsonPath, 'utf8'));
|
||||||
|
} else {
|
||||||
|
const imagesDirPath = path.join(dirPath, 'images');
|
||||||
|
if (fs.existsSync(imagesDirPath)) {
|
||||||
|
const files = fs.readdirSync(imagesDirPath);
|
||||||
|
images = files.map(f => `/content-images/${slug}/${f}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const route = routeFromDir(slug);
|
||||||
|
pages[route] = { frontmatter, content, images };
|
||||||
|
}
|
||||||
|
|
||||||
|
function walkContent(dirPath, slug) {
|
||||||
|
processDir(dirPath, slug);
|
||||||
|
const entries = fs.readdirSync(dirPath, { withFileTypes: true });
|
||||||
|
for (const entry of entries) {
|
||||||
|
if (!entry.isDirectory() || entry.name.startsWith('_')) continue;
|
||||||
|
const childSlug = slug ? `${slug}/${entry.name}` : entry.name;
|
||||||
|
walkContent(path.join(dirPath, entry.name), childSlug);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
walkContent(CONTENT_DIR, '');
|
||||||
|
|
||||||
|
// --- Write output ---
|
||||||
|
const output = `// AUTO-GENERATED by scripts/build-content.js — do not edit by hand.
|
||||||
|
|
||||||
|
export const siteConfig = ${JSON.stringify(siteConfig, null, 2)};
|
||||||
|
|
||||||
|
export const pages = ${JSON.stringify(pages, null, 2)};
|
||||||
|
`;
|
||||||
|
|
||||||
|
fs.mkdirSync(path.dirname(OUTPUT_FILE), { recursive: true });
|
||||||
|
fs.writeFileSync(OUTPUT_FILE, output, 'utf8');
|
||||||
|
console.log(`[build-content] Generated ${OUTPUT_FILE}`);
|
||||||
|
console.log(`[build-content] Pages: ${Object.keys(pages).join(', ')}`);
|
||||||
40
src/App.js
40
src/App.js
@ -1,25 +1,33 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';
|
import { BrowserRouter as Router, Route, Routes } from 'react-router-dom';
|
||||||
|
import { ContentProvider, usePages } from './framework/ContentProvider';
|
||||||
|
import { getTemplate } from './framework/TemplateRegistry';
|
||||||
import Navbar from './components/Navbar';
|
import Navbar from './components/Navbar';
|
||||||
import Home from './components/Home';
|
|
||||||
import Contact from './components/Contact';
|
|
||||||
import About from './components/About';
|
|
||||||
import Footer from './components/Footer';
|
import Footer from './components/Footer';
|
||||||
|
import './plugins/index';
|
||||||
|
|
||||||
const App = () => {
|
const PageRoutes = () => {
|
||||||
|
const pages = usePages();
|
||||||
return (
|
return (
|
||||||
<Router>
|
<Routes>
|
||||||
<>
|
{Object.entries(pages).map(([route, page]) => {
|
||||||
<Navbar />
|
const Template = getTemplate(page.frontmatter.template);
|
||||||
<Routes>
|
return <Route key={route} path={route} element={<Template page={page} />} />;
|
||||||
<Route path="/" element={<Home />} />
|
})}
|
||||||
<Route path="/contact" element={<Contact />} />
|
</Routes>
|
||||||
<Route path="/about" element={<About />} />
|
|
||||||
</Routes>
|
|
||||||
<Footer />
|
|
||||||
</>
|
|
||||||
</Router>
|
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default App;
|
const App = () => (
|
||||||
|
<Router>
|
||||||
|
<ContentProvider>
|
||||||
|
<>
|
||||||
|
<Navbar />
|
||||||
|
<PageRoutes />
|
||||||
|
<Footer />
|
||||||
|
</>
|
||||||
|
</ContentProvider>
|
||||||
|
</Router>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default App;
|
||||||
|
|||||||
@ -3,19 +3,24 @@ import App from './App';
|
|||||||
|
|
||||||
// masonry-layout requires DOM layout APIs not available in jsdom
|
// masonry-layout requires DOM layout APIs not available in jsdom
|
||||||
jest.mock('masonry-layout', () => {
|
jest.mock('masonry-layout', () => {
|
||||||
return jest.fn().mockImplementation(() => ({
|
const MockMasonry = function () {};
|
||||||
layout: jest.fn(),
|
MockMasonry.prototype.layout = jest.fn();
|
||||||
destroy: jest.fn(),
|
MockMasonry.prototype.destroy = jest.fn();
|
||||||
}));
|
return MockMasonry;
|
||||||
});
|
});
|
||||||
|
|
||||||
test('renders site title in navbar', () => {
|
test('renders site title in navbar', () => {
|
||||||
render(<App />);
|
render(<App />);
|
||||||
expect(screen.getByText(/Jake Runyan Photography/i)).toBeInTheDocument();
|
// Use getAllByText since the title also appears in the homepage hero
|
||||||
|
const matches = screen.getAllByText(/Jake Runyan Photography/i);
|
||||||
|
expect(matches.length).toBeGreaterThan(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
test('renders navigation links', () => {
|
test('renders navigation links', () => {
|
||||||
render(<App />);
|
render(<App />);
|
||||||
expect(screen.getByRole('link', { name: /contact/i })).toBeInTheDocument();
|
// Use getAllByRole to handle multiple matching links (navbar + footer)
|
||||||
expect(screen.getByRole('link', { name: /about/i })).toBeInTheDocument();
|
const contactLinks = screen.getAllByRole('link', { name: /^contact$/i });
|
||||||
|
const aboutLinks = screen.getAllByRole('link', { name: /^about$/i });
|
||||||
|
expect(contactLinks.length).toBeGreaterThan(0);
|
||||||
|
expect(aboutLinks.length).toBeGreaterThan(0);
|
||||||
});
|
});
|
||||||
|
|||||||
@ -1,46 +0,0 @@
|
|||||||
.about-container {
|
|
||||||
display: flex;
|
|
||||||
justify-content: center;
|
|
||||||
align-items: center;
|
|
||||||
width: 100%; /* Full width container */
|
|
||||||
height: 100vh; /* Full height of viewport */
|
|
||||||
background-color: #333;
|
|
||||||
}
|
|
||||||
|
|
||||||
.about-content {
|
|
||||||
width: 33%; /* 1/3 of the viewport width */
|
|
||||||
max-width: 800px; /* Limit maximum width */
|
|
||||||
padding: 20px;
|
|
||||||
background-color: #222;
|
|
||||||
border: 1px solid black; /* Light border for contrast */
|
|
||||||
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); /* Subtle shadow */
|
|
||||||
border-radius: 10px; /* Rounded corners */
|
|
||||||
text-align: center; /* Center align headers and image */
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.about-content {
|
|
||||||
width: 90%; /* Full width on smaller screens */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
.about-image {
|
|
||||||
width: 100px;
|
|
||||||
height: 100px;
|
|
||||||
border-radius: 50%;
|
|
||||||
margin-bottom: 20px;
|
|
||||||
object-fit: cover;
|
|
||||||
}
|
|
||||||
|
|
||||||
.about-title {
|
|
||||||
font-size: 1.5rem;
|
|
||||||
margin-bottom: 10px;
|
|
||||||
color: whitesmoke;
|
|
||||||
}
|
|
||||||
|
|
||||||
.about-content p {
|
|
||||||
text-align: left;
|
|
||||||
color: #999;
|
|
||||||
line-height: 1.6;
|
|
||||||
margin-bottom: 15px;
|
|
||||||
}
|
|
||||||
@ -1,34 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import './About.css';
|
|
||||||
|
|
||||||
const About = () => {
|
|
||||||
return (
|
|
||||||
<div className="about-container">
|
|
||||||
<div className="about-content">
|
|
||||||
<img
|
|
||||||
src="https://gallery.whitney.rip/api/v1/t/287329d8835b299400819437c9c2a2d192041159/2tdm690t/fit_4096"
|
|
||||||
alt="Jake"
|
|
||||||
className="about-image"
|
|
||||||
/>
|
|
||||||
<h1 className="about-title">About Me</h1>
|
|
||||||
<p>
|
|
||||||
I'm Jake, a small time photographer out of the Bay Area. I started shooting as a kid on my dad's old
|
|
||||||
Canon EOS 60D, and now have graduated to owning my own gear. Having an artistic outlet has always been
|
|
||||||
a force of balance for me, and with a background in video and photo editing, this has been a fun one.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
My current setup is a Sony Alpha 6300 with a 27mm pancake lens. This budget setup was perfect for bringing
|
|
||||||
my camera along on bike rides, as cycing is another hobby. You can find me on Youtube as Jake's West Coast.
|
|
||||||
My current photography interests include capturing the beauty of the Bay Area and California coast on
|
|
||||||
our bike rides, as well as moments in my everyday life.
|
|
||||||
</p>
|
|
||||||
<p>
|
|
||||||
If you'd like to learn more about Jake, the person, you can find more at my instagram @runyanjake or on my
|
|
||||||
personal website jake.runyan.dev.
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default About;
|
|
||||||
@ -1,17 +0,0 @@
|
|||||||
.contact {
|
|
||||||
background-color: #333;
|
|
||||||
display: flex;
|
|
||||||
flex-direction: column;
|
|
||||||
align-items: center;
|
|
||||||
justify-content: center;
|
|
||||||
height: 100vh;
|
|
||||||
}
|
|
||||||
|
|
||||||
.contact h1 {
|
|
||||||
color:white;
|
|
||||||
font-weight: bold;
|
|
||||||
}
|
|
||||||
|
|
||||||
.contact p {
|
|
||||||
color:white;
|
|
||||||
}
|
|
||||||
@ -1,16 +0,0 @@
|
|||||||
import React from 'react';
|
|
||||||
import { Helmet } from 'react-helmet';
|
|
||||||
import './Contact.css';
|
|
||||||
|
|
||||||
const Contact = () => {
|
|
||||||
return (
|
|
||||||
<div className="contact">
|
|
||||||
<Helmet><title>Contact</title></Helmet>
|
|
||||||
<h1>Contact Me</h1>
|
|
||||||
<p>Email: jake@runyan.dev</p>
|
|
||||||
<p>Instagram: @jakerunyanphotography</p>
|
|
||||||
</div>
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Contact;
|
|
||||||
@ -2,8 +2,8 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-evenly;
|
justify-content: space-evenly;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
background-color: #0b0b0b;
|
background-color: var(--color-bg-nav);
|
||||||
color: white;
|
color: var(--color-text-nav);
|
||||||
padding: 10px 20px;
|
padding: 10px 20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -14,7 +14,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.footer-links a {
|
.footer-links a {
|
||||||
color: gray;
|
color: var(--color-text-footer);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
margin: 5px 0;
|
margin: 5px 0;
|
||||||
user-select: none;
|
user-select: none;
|
||||||
|
|||||||
@ -1,24 +1,28 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
|
import { useSiteConfig } from '../framework/ContentProvider';
|
||||||
import './Footer.css';
|
import './Footer.css';
|
||||||
|
|
||||||
const Footer = () => {
|
const Footer = () => {
|
||||||
|
const { footerCopyright, nav, social } = useSiteConfig();
|
||||||
return (
|
return (
|
||||||
<footer className="footer">
|
<footer className="footer">
|
||||||
<div className="footer-links left">
|
<div className="footer-links left">
|
||||||
<a href="https://github.com/runyanjake/jakesphotos" rel="noopener noreferrer">GitHub</a>
|
{social.map(({ label, url }) => (
|
||||||
<a href="https://www.instagram.com/jakerunyanphotography" rel="noopener noreferrer">Instagram</a>
|
<a key={url} href={url} rel="noopener noreferrer">{label}</a>
|
||||||
|
))}
|
||||||
</div>
|
</div>
|
||||||
<div className="footer-title">
|
<div className="footer-title">
|
||||||
<p>© {new Date().getFullYear()} Jake Runyan</p>
|
<p>© {new Date().getFullYear()} {footerCopyright}</p>
|
||||||
</div>
|
</div>
|
||||||
<div className="footer-links right">
|
<div className="footer-links right">
|
||||||
<Link to="/">Home</Link>
|
<Link to="/">Home</Link>
|
||||||
<Link to="/contact">Contact</Link>
|
{nav.map(({ label, path }) => (
|
||||||
<Link to="/about">About</Link>
|
<Link key={path} to={path}>{label}</Link>
|
||||||
|
))}
|
||||||
</div>
|
</div>
|
||||||
</footer>
|
</footer>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Footer;
|
export default Footer;
|
||||||
|
|||||||
23
src/components/MarkdownRenderer.css
Normal file
23
src/components/MarkdownRenderer.css
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
.markdown-body {
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
font-family: var(--font-body);
|
||||||
|
font-size: var(--font-size-base);
|
||||||
|
line-height: var(--line-height-body);
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body p {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body h1,
|
||||||
|
.markdown-body h2,
|
||||||
|
.markdown-body h3 {
|
||||||
|
color: var(--color-text);
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
margin-bottom: var(--space-sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
.markdown-body a {
|
||||||
|
color: var(--color-accent);
|
||||||
|
}
|
||||||
11
src/components/MarkdownRenderer.js
Normal file
11
src/components/MarkdownRenderer.js
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import ReactMarkdown from 'react-markdown';
|
||||||
|
import './MarkdownRenderer.css';
|
||||||
|
|
||||||
|
const MarkdownRenderer = ({ content }) => (
|
||||||
|
<div className="markdown-body">
|
||||||
|
<ReactMarkdown>{content}</ReactMarkdown>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default MarkdownRenderer;
|
||||||
@ -2,7 +2,7 @@
|
|||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
background-color: #0b0b0b;
|
background-color: var(--color-bg-nav);
|
||||||
padding: 10px 20px;
|
padding: 10px 20px;
|
||||||
gap: 10px;
|
gap: 10px;
|
||||||
}
|
}
|
||||||
@ -15,7 +15,7 @@
|
|||||||
|
|
||||||
.navbar-logo .logo {
|
.navbar-logo .logo {
|
||||||
height: 50px;
|
height: 50px;
|
||||||
border-radius: 10px;
|
border-radius: var(--radius-lg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-links {
|
.navbar-links {
|
||||||
@ -25,10 +25,11 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.navbar-links a {
|
.navbar-links a {
|
||||||
color: white;
|
color: var(--color-text-nav);
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
font-family: 'Arial', sans-serif;
|
font-family: var(--font-heading);
|
||||||
font-size: 16px;
|
font-size: var(--font-size-base);
|
||||||
|
transition: text-decoration var(--transition-fast);
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-links a:hover {
|
.navbar-links a:hover {
|
||||||
@ -36,8 +37,8 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.navbar-title h1 {
|
.navbar-title h1 {
|
||||||
color: white;
|
color: var(--color-text-nav);
|
||||||
font-family: 'Arial', sans-serif;
|
font-family: var(--font-heading);
|
||||||
font-size: 24px;
|
font-size: 24px;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
}
|
}
|
||||||
@ -51,7 +52,7 @@
|
|||||||
.navbar-icons .icon {
|
.navbar-icons .icon {
|
||||||
height: 30px;
|
height: 30px;
|
||||||
width: 30px;
|
width: 30px;
|
||||||
transition: transform 0.2s;
|
transition: transform var(--transition-fast);
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-icons .icon:hover {
|
.navbar-icons .icon:hover {
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
import React, { useEffect, useState } from 'react';
|
import React, { useEffect, useState } from 'react';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
|
import { useSiteConfig } from '../framework/ContentProvider';
|
||||||
import './Navbar.css';
|
import './Navbar.css';
|
||||||
import logo from './static/navbar-logo.png';
|
import logo from './static/navbar-logo.png';
|
||||||
import github_dark from './static/github-dark.png';
|
import github_dark from './static/github-dark.png';
|
||||||
@ -7,9 +8,15 @@ import github_light from './static/github-light.png';
|
|||||||
import instagram_dark from './static/instagram-dark.png';
|
import instagram_dark from './static/instagram-dark.png';
|
||||||
import instagram_light from './static/instagram-light.png';
|
import instagram_light from './static/instagram-light.png';
|
||||||
|
|
||||||
|
const ICON_MAP = {
|
||||||
|
github: { dark: github_light, light: github_dark },
|
||||||
|
instagram: { dark: instagram_light, light: instagram_dark },
|
||||||
|
};
|
||||||
|
|
||||||
const darkModeQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
const darkModeQuery = window.matchMedia('(prefers-color-scheme: dark)');
|
||||||
|
|
||||||
const Navbar = () => {
|
const Navbar = () => {
|
||||||
|
const { siteTitle, nav, social } = useSiteConfig();
|
||||||
const [isDarkMode, setIsDarkMode] = useState(darkModeQuery.matches);
|
const [isDarkMode, setIsDarkMode] = useState(darkModeQuery.matches);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
@ -18,9 +25,6 @@ const Navbar = () => {
|
|||||||
return () => darkModeQuery.removeEventListener('change', handler);
|
return () => darkModeQuery.removeEventListener('change', handler);
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const githubIcon = isDarkMode ? github_light : github_dark;
|
|
||||||
const instagramIcon = isDarkMode ? instagram_light : instagram_dark;
|
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<nav className="navbar">
|
<nav className="navbar">
|
||||||
<div className="navbar-logo">
|
<div className="navbar-logo">
|
||||||
@ -28,20 +32,24 @@ const Navbar = () => {
|
|||||||
<img src={logo} alt="Logo" className="logo" />
|
<img src={logo} alt="Logo" className="logo" />
|
||||||
</Link>
|
</Link>
|
||||||
<div className="navbar-links">
|
<div className="navbar-links">
|
||||||
<Link to="/contact">Contact</Link>
|
{nav.map(({ label, path }) => (
|
||||||
<Link to="/about">About</Link>
|
<Link key={path} to={path}>{label}</Link>
|
||||||
|
))}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div className="navbar-title">
|
<div className="navbar-title">
|
||||||
<h1>Jake Runyan Photography</h1>
|
<h1>{siteTitle}</h1>
|
||||||
</div>
|
</div>
|
||||||
<div className="navbar-icons">
|
<div className="navbar-icons">
|
||||||
<a href="https://www.instagram.com/jakerunyanphotography" target="_blank" rel="noopener noreferrer">
|
{social.map(({ label, url, icon }) => {
|
||||||
<img src={instagramIcon} alt="Instagram" className="icon" title="My Instagram" />
|
const icons = ICON_MAP[icon];
|
||||||
</a>
|
const src = icons ? (isDarkMode ? icons.dark : icons.light) : null;
|
||||||
<a href="https://github.com/runyanjake/jakesphotos" target="_blank" rel="noopener noreferrer">
|
return (
|
||||||
<img src={githubIcon} alt="GitHub" className="icon" title="This Website's Source Code!" />
|
<a key={icon} href={url} target="_blank" rel="noopener noreferrer">
|
||||||
</a>
|
{src && <img src={src} alt={label} className="icon" title={label} />}
|
||||||
|
</a>
|
||||||
|
);
|
||||||
|
})}
|
||||||
</div>
|
</div>
|
||||||
</nav>
|
</nav>
|
||||||
);
|
);
|
||||||
|
|||||||
@ -1,84 +0,0 @@
|
|||||||
/* Images are loaded from urls to avoid checking everything in to git. */
|
|
||||||
const images = [
|
|
||||||
"https://images.whitney.rip/api/assets/d14fcd1e-5479-4312-ae39-055283c8fd75/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/1114e4b3-99a7-4cdc-9ce2-ad52d1a0046f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/1ce61b59-98a7-401c-9840-72dc51822494/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/2250e289-03ae-4ee4-a63a-3ba29db99dd0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/ec93e5f8-ca2e-4078-8190-d884435513eb/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/40cb4952-0b8a-4500-a692-a20acbe01ff4/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/2fe3919e-00d4-4afc-8140-a81dbf266c82/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/3a89717a-b0b9-42a6-ab34-0f4dc3d90987/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/8beaf017-029f-4827-a3c2-066f9453e271/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/87cd7f35-f4c5-4a1e-a56d-c6d8e9d082da/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/2c55949d-7a2d-4bde-a87e-107ce352bc60/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/44f3ce06-3b34-42d2-9396-424ff95ba672/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/d88e4a71-d645-48de-9b22-aad8f1ae3bde/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/d84b166b-56fc-48cb-b932-7847d70ade04/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/01d40f57-dbf6-4c9d-8fc1-0ac22dfe17e5/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/e7055bf2-626a-47a5-9526-15b2de26249e/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/7635d87d-5ed6-4342-9cc2-0c6d0e0a1425/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/0beaaf50-cb2c-4d84-b099-e1af24f7d2e3/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/90052323-c4df-4820-8fe8-7658424991b8/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/4749cdd5-aa5a-4911-9567-f3f5afca6ecc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/f4c18690-b0fe-4ed1-a1d7-ea49b8828aa6/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/1a8dd56a-3433-40ab-8619-f385560ee807/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/fe1b66b4-4f98-43a3-bb26-6d4661d5ffe2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/787274d8-d94b-479c-9a11-b60f3ca3e640/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/91d11918-7471-4e81-b101-23511e14f45d/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/bfa43b2b-4aa1-4792-ab2f-aff1e226cdf0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/30273029-cba9-45a6-aa7c-3af27d0bd835/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/f7bfc5b1-6ef6-42ce-b4a2-237939b03ae9/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/e29ce2a5-987c-4453-81f2-b2e7b161e7d2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/3082f0af-fb30-4e04-baae-5b47d310e380/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/15dd24ba-e2ae-4093-a098-988aac86e1e0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/fc6c3d20-2521-4d31-9f31-19476ad30a65/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/8a750cc3-7bef-4bc6-9727-83151dead578/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/4db2ea6d-8998-40df-bf05-fc27beeb2085/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/ec92f32f-0c08-4317-b8e2-90c53c2e6416/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/7d5803ea-20b9-448f-9659-6fb801f15c68/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/dfb53a18-05dc-4cbc-bdd2-7f8b6f5a4e8e/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/e6934d1a-543c-4ed8-9c29-a94e915f9d94/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/0e88d871-fc8e-4ac3-a96a-920fce3cc546/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/379a3b92-ff9b-4455-afe7-c2c6a8a270cd/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/e03f66a6-a619-4624-a473-860026b3446a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/4d759c78-64c8-4607-9b61-7d1f536fe98f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/0ff98add-0a3c-408b-af91-6320df62910f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/ce5eba3e-c444-4a20-a88a-92bfe56c6891/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/a837364d-ed8a-44cf-a8db-8db320bf81e6/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/8e254f41-7b14-48b3-ba98-a96fb9c05129/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/1f877a0c-8e36-4751-b50a-5ea12c73aefc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/1979efcd-ba01-4194-b0f7-8e64a996c1cc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/f4fcf415-7eb1-4131-8ef8-b0456aa31c62/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/4e440673-7294-48ac-99a4-05cc3fb07cd2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/62baec73-487d-4a72-bdc4-7c168cf6f82a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/88cd4904-2ab1-4c60-b225-58d73945d724/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/dd59bec7-d922-4a53-af12-3f252c109d0d/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/d33762bc-1204-4f33-8e6f-2ea5bde72f1a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/fe4c9bf0-334b-40fb-9a44-8b1984e2818a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/993736e1-a3ae-4ec5-8c67-c25c4c734f23/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/038e8d18-87cd-49f4-8e53-4c36a5f76cfb/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/994408ea-6f04-473f-84ea-de3c77265298/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/ddaf8248-7cdf-4e39-9639-d2826dc9d038/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/214921e1-7b75-4059-ad53-1c1062f6df45/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/18e59afb-8d23-433d-9f91-fb78d6efc729/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/72d0e30d-c27c-4d8e-8977-0ae438178324/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/d496de3c-bf3a-4b49-a34a-96c998c288a0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/fd4b8886-7a55-478e-8bc8-6cba70fe9cd2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/30b56b85-3225-44df-903d-5ba14e07927c/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/185d198a-a2d3-40f1-b508-11d03edf8162/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/92063a5c-0c50-46c1-9bb3-8c294305b5a7/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/2fb5267d-7b71-4612-ad9c-4be961704a67/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/4d0fbaa8-90c2-4a46-9b32-d463fac24ba1/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/bb8cf2fc-a745-4ff9-87a3-51a5407de9a3/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/abefba8f-c77e-46e7-9f62-9a3da5ec8128/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/d9fc53c6-4645-4451-91d5-94927ff638ea/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/ddf6d29e-81f4-4c3b-8277-450a88b0d75f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/b66557e8-aa4a-4f0b-b252-ee0ece28b0b5/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/8f6df2db-6a63-446b-9c00-5830ff91ea5c/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/00d4ad2e-d549-45ac-9a7c-d9f97cc2a0ba/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/97e8aa93-39fb-42d9-b1e0-0536eb81e4ba/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/0eef2205-2260-4307-80fa-520aeb139558/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
"https://images.whitney.rip/api/assets/0fe37f58-c2c6-4007-ae6d-0230ab4a7507/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
|
||||||
];
|
|
||||||
|
|
||||||
export default images;
|
|
||||||
16
src/framework/ContentProvider.js
Normal file
16
src/framework/ContentProvider.js
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
import React, { createContext, useContext } from 'react';
|
||||||
|
import { siteConfig, pages } from '../generated/content';
|
||||||
|
|
||||||
|
const SiteConfigContext = createContext(siteConfig);
|
||||||
|
const PagesContext = createContext(pages);
|
||||||
|
|
||||||
|
export const ContentProvider = ({ children }) => (
|
||||||
|
<SiteConfigContext.Provider value={siteConfig}>
|
||||||
|
<PagesContext.Provider value={pages}>
|
||||||
|
{children}
|
||||||
|
</PagesContext.Provider>
|
||||||
|
</SiteConfigContext.Provider>
|
||||||
|
);
|
||||||
|
|
||||||
|
export const useSiteConfig = () => useContext(SiteConfigContext);
|
||||||
|
export const usePages = () => useContext(PagesContext);
|
||||||
19
src/framework/TemplateRegistry.js
Normal file
19
src/framework/TemplateRegistry.js
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
import GalleryTemplate from '../templates/GalleryTemplate';
|
||||||
|
import DefaultTemplate from '../templates/DefaultTemplate';
|
||||||
|
import ContactTemplate from '../templates/ContactTemplate';
|
||||||
|
import HomepageTemplate from '../templates/HomepageTemplate';
|
||||||
|
import MenuTemplate from '../templates/MenuTemplate';
|
||||||
|
|
||||||
|
const registry = {
|
||||||
|
gallery: GalleryTemplate,
|
||||||
|
default: DefaultTemplate,
|
||||||
|
contact: ContactTemplate,
|
||||||
|
homepage: HomepageTemplate,
|
||||||
|
menu: MenuTemplate,
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getTemplate = (name) => registry[name] || registry['default'];
|
||||||
|
|
||||||
|
export const registerTemplate = (name, Component) => {
|
||||||
|
registry[name] = Component;
|
||||||
|
};
|
||||||
267
src/generated/content.js
Normal file
267
src/generated/content.js
Normal file
@ -0,0 +1,267 @@
|
|||||||
|
// AUTO-GENERATED by scripts/build-content.js — do not edit by hand.
|
||||||
|
|
||||||
|
export const siteConfig = {
|
||||||
|
"siteTitle": "Jake Runyan Photography",
|
||||||
|
"footerCopyright": "Jake Runyan",
|
||||||
|
"nav": [
|
||||||
|
{
|
||||||
|
"label": "Gallery",
|
||||||
|
"path": "/gallery"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "Contact",
|
||||||
|
"path": "/contact"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "About",
|
||||||
|
"path": "/about"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"social": [
|
||||||
|
{
|
||||||
|
"label": "Instagram",
|
||||||
|
"url": "https://www.instagram.com/jakerunyanphotography",
|
||||||
|
"icon": "instagram"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"label": "GitHub",
|
||||||
|
"url": "https://github.com/runyanjake/jakesphotos",
|
||||||
|
"icon": "github"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
export const pages = {
|
||||||
|
"/": {
|
||||||
|
"frontmatter": {
|
||||||
|
"template": "homepage",
|
||||||
|
"title": "Jake Runyan Photography",
|
||||||
|
"subtitle": "Bay Area · Cycling · Life"
|
||||||
|
},
|
||||||
|
"content": "## Bay Area Life\n\nI'm Jake, a small-time photographer out of the Bay Area. I shoot the world around me — the coastlines, the hills, the everyday scenes that make this place feel like home.\n\n## On Two Wheels\n\nMy Sony Alpha 6300 comes along on every ride. There's something about cycling that puts you right in the middle of a scene — no glass between you and the world.\n\n## Everyday Moments\n\nBeyond landscapes, it's the small details that catch my eye — textures, light, the quiet moments between everything else.",
|
||||||
|
"images": [
|
||||||
|
"https://images.whitney.rip/api/assets/d14fcd1e-5479-4312-ae39-055283c8fd75/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1114e4b3-99a7-4cdc-9ce2-ad52d1a0046f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1ce61b59-98a7-401c-9840-72dc51822494/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2250e289-03ae-4ee4-a63a-3ba29db99dd0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ec93e5f8-ca2e-4078-8190-d884435513eb/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/40cb4952-0b8a-4500-a692-a20acbe01ff4/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2fe3919e-00d4-4afc-8140-a81dbf266c82/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/3a89717a-b0b9-42a6-ab34-0f4dc3d90987/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8beaf017-029f-4827-a3c2-066f9453e271/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/87cd7f35-f4c5-4a1e-a56d-c6d8e9d082da/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2c55949d-7a2d-4bde-a87e-107ce352bc60/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/44f3ce06-3b34-42d2-9396-424ff95ba672/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d88e4a71-d645-48de-9b22-aad8f1ae3bde/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d84b166b-56fc-48cb-b932-7847d70ade04/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/01d40f57-dbf6-4c9d-8fc1-0ac22dfe17e5/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e7055bf2-626a-47a5-9526-15b2de26249e/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/7635d87d-5ed6-4342-9cc2-0c6d0e0a1425/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0beaaf50-cb2c-4d84-b099-e1af24f7d2e3/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/90052323-c4df-4820-8fe8-7658424991b8/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4749cdd5-aa5a-4911-9567-f3f5afca6ecc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/f4c18690-b0fe-4ed1-a1d7-ea49b8828aa6/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1a8dd56a-3433-40ab-8619-f385560ee807/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fe1b66b4-4f98-43a3-bb26-6d4661d5ffe2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/787274d8-d94b-479c-9a11-b60f3ca3e640/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/91d11918-7471-4e81-b101-23511e14f45d/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/bfa43b2b-4aa1-4792-ab2f-aff1e226cdf0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/30273029-cba9-45a6-aa7c-3af27d0bd835/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/f7bfc5b1-6ef6-42ce-b4a2-237939b03ae9/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e29ce2a5-987c-4453-81f2-b2e7b161e7d2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/3082f0af-fb30-4e04-baae-5b47d310e380/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/15dd24ba-e2ae-4093-a098-988aac86e1e0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fc6c3d20-2521-4d31-9f31-19476ad30a65/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8a750cc3-7bef-4bc6-9727-83151dead578/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4db2ea6d-8998-40df-bf05-fc27beeb2085/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ec92f32f-0c08-4317-b8e2-90c53c2e6416/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/7d5803ea-20b9-448f-9659-6fb801f15c68/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/dfb53a18-05dc-4cbc-bdd2-7f8b6f5a4e8e/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e6934d1a-543c-4ed8-9c29-a94e915f9d94/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0e88d871-fc8e-4ac3-a96a-920fce3cc546/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/379a3b92-ff9b-4455-afe7-c2c6a8a270cd/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e03f66a6-a619-4624-a473-860026b3446a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4d759c78-64c8-4607-9b61-7d1f536fe98f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0ff98add-0a3c-408b-af91-6320df62910f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ce5eba3e-c444-4a20-a88a-92bfe56c6891/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/a837364d-ed8a-44cf-a8db-8db320bf81e6/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8e254f41-7b14-48b3-ba98-a96fb9c05129/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1f877a0c-8e36-4751-b50a-5ea12c73aefc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1979efcd-ba01-4194-b0f7-8e64a996c1cc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/f4fcf415-7eb1-4131-8ef8-b0456aa31c62/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4e440673-7294-48ac-99a4-05cc3fb07cd2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/62baec73-487d-4a72-bdc4-7c168cf6f82a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/88cd4904-2ab1-4c60-b225-58d73945d724/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/dd59bec7-d922-4a53-af12-3f252c109d0d/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d33762bc-1204-4f33-8e6f-2ea5bde72f1a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fe4c9bf0-334b-40fb-9a44-8b1984e2818a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/993736e1-a3ae-4ec5-8c67-c25c4c734f23/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/038e8d18-87cd-49f4-8e53-4c36a5f76cfb/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/994408ea-6f04-473f-84ea-de3c77265298/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ddaf8248-7cdf-4e39-9639-d2826dc9d038/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/214921e1-7b75-4059-ad53-1c1062f6df45/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/18e59afb-8d23-433d-9f91-fb78d6efc729/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/72d0e30d-c27c-4d8e-8977-0ae438178324/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d496de3c-bf3a-4b49-a34a-96c998c288a0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fd4b8886-7a55-478e-8bc8-6cba70fe9cd2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/30b56b85-3225-44df-903d-5ba14e07927c/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/185d198a-a2d3-40f1-b508-11d03edf8162/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/92063a5c-0c50-46c1-9bb3-8c294305b5a7/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2fb5267d-7b71-4612-ad9c-4be961704a67/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4d0fbaa8-90c2-4a46-9b32-d463fac24ba1/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/bb8cf2fc-a745-4ff9-87a3-51a5407de9a3/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/abefba8f-c77e-46e7-9f62-9a3da5ec8128/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d9fc53c6-4645-4451-91d5-94927ff638ea/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ddf6d29e-81f4-4c3b-8277-450a88b0d75f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/b66557e8-aa4a-4f0b-b252-ee0ece28b0b5/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8f6df2db-6a63-446b-9c00-5830ff91ea5c/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/00d4ad2e-d549-45ac-9a7c-d9f97cc2a0ba/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/97e8aa93-39fb-42d9-b1e0-0536eb81e4ba/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0eef2205-2260-4307-80fa-520aeb139558/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0fe37f58-c2c6-4007-ae6d-0230ab4a7507/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"/about": {
|
||||||
|
"frontmatter": {
|
||||||
|
"template": "default",
|
||||||
|
"title": "About Me",
|
||||||
|
"profileImage": "https://gallery.whitney.rip/api/v1/t/287329d8835b299400819437c9c2a2d192041159/2tdm690t/fit_4096"
|
||||||
|
},
|
||||||
|
"content": "I'm Jake, a small time photographer out of the Bay Area. I started shooting as a kid on my dad's old Canon EOS 60D, and now have graduated to owning my own gear. Having an artistic outlet has always been a force of balance for me, and with a background in video and photo editing, this has been a fun one.\n\nMy current setup is a Sony Alpha 6300 with a 27mm pancake lens. This budget setup was perfect for bringing my camera along on bike rides, as cycling is another hobby. You can find me on Youtube as Jake's West Coast. My current photography interests include capturing the beauty of the Bay Area and California coast on our bike rides, as well as moments in my everyday life.\n\nIf you'd like to learn more about Jake, the person, you can find more at my instagram @runyanjake or on my personal website jake.runyan.dev.",
|
||||||
|
"images": []
|
||||||
|
},
|
||||||
|
"/contact": {
|
||||||
|
"frontmatter": {
|
||||||
|
"template": "contact",
|
||||||
|
"title": "Contact Me",
|
||||||
|
"email": "jake@runyan.dev",
|
||||||
|
"instagram": "jakerunyanphotography"
|
||||||
|
},
|
||||||
|
"content": "",
|
||||||
|
"images": []
|
||||||
|
},
|
||||||
|
"/gallery": {
|
||||||
|
"frontmatter": {
|
||||||
|
"template": "menu",
|
||||||
|
"title": "Gallery",
|
||||||
|
"description": "Browse my photo collections"
|
||||||
|
},
|
||||||
|
"content": "## [Landscapes](/gallery/landscapes)\n\nMountains, coastal cliffs, and open skies across California and the Bay Area.\n\n## [Portraits](/gallery/portraits)\n\nCandid moments and faces from everyday life.\n\n## [Textures](/gallery/textures)\n\nAbstract surfaces and patterns found in the world around us.\n\n## [Nature](/gallery/nature)\n\nFlora, fauna, and natural forms.",
|
||||||
|
"images": []
|
||||||
|
},
|
||||||
|
"/gallery/landscapes": {
|
||||||
|
"frontmatter": {
|
||||||
|
"template": "gallery",
|
||||||
|
"title": "Landscapes"
|
||||||
|
},
|
||||||
|
"content": "",
|
||||||
|
"images": [
|
||||||
|
"https://images.whitney.rip/api/assets/d14fcd1e-5479-4312-ae39-055283c8fd75/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1114e4b3-99a7-4cdc-9ce2-ad52d1a0046f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1ce61b59-98a7-401c-9840-72dc51822494/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2250e289-03ae-4ee4-a63a-3ba29db99dd0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ec93e5f8-ca2e-4078-8190-d884435513eb/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/40cb4952-0b8a-4500-a692-a20acbe01ff4/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2fe3919e-00d4-4afc-8140-a81dbf266c82/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/3a89717a-b0b9-42a6-ab34-0f4dc3d90987/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8beaf017-029f-4827-a3c2-066f9453e271/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/87cd7f35-f4c5-4a1e-a56d-c6d8e9d082da/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2c55949d-7a2d-4bde-a87e-107ce352bc60/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/44f3ce06-3b34-42d2-9396-424ff95ba672/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d88e4a71-d645-48de-9b22-aad8f1ae3bde/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d84b166b-56fc-48cb-b932-7847d70ade04/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/01d40f57-dbf6-4c9d-8fc1-0ac22dfe17e5/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e7055bf2-626a-47a5-9526-15b2de26249e/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/7635d87d-5ed6-4342-9cc2-0c6d0e0a1425/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0beaaf50-cb2c-4d84-b099-e1af24f7d2e3/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/90052323-c4df-4820-8fe8-7658424991b8/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4749cdd5-aa5a-4911-9567-f3f5afca6ecc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"/gallery/nature": {
|
||||||
|
"frontmatter": {
|
||||||
|
"template": "gallery",
|
||||||
|
"title": "Nature"
|
||||||
|
},
|
||||||
|
"content": "",
|
||||||
|
"images": [
|
||||||
|
"https://images.whitney.rip/api/assets/18e59afb-8d23-433d-9f91-fb78d6efc729/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/72d0e30d-c27c-4d8e-8977-0ae438178324/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d496de3c-bf3a-4b49-a34a-96c998c288a0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fd4b8886-7a55-478e-8bc8-6cba70fe9cd2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/30b56b85-3225-44df-903d-5ba14e07927c/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/185d198a-a2d3-40f1-b508-11d03edf8162/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/92063a5c-0c50-46c1-9bb3-8c294305b5a7/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/2fb5267d-7b71-4612-ad9c-4be961704a67/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4d0fbaa8-90c2-4a46-9b32-d463fac24ba1/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/bb8cf2fc-a745-4ff9-87a3-51a5407de9a3/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/abefba8f-c77e-46e7-9f62-9a3da5ec8128/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d9fc53c6-4645-4451-91d5-94927ff638ea/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ddf6d29e-81f4-4c3b-8277-450a88b0d75f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/b66557e8-aa4a-4f0b-b252-ee0ece28b0b5/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8f6df2db-6a63-446b-9c00-5830ff91ea5c/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/00d4ad2e-d549-45ac-9a7c-d9f97cc2a0ba/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/97e8aa93-39fb-42d9-b1e0-0536eb81e4ba/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0eef2205-2260-4307-80fa-520aeb139558/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0fe37f58-c2c6-4007-ae6d-0230ab4a7507/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"/gallery/portraits": {
|
||||||
|
"frontmatter": {
|
||||||
|
"template": "gallery",
|
||||||
|
"title": "Portraits"
|
||||||
|
},
|
||||||
|
"content": "",
|
||||||
|
"images": [
|
||||||
|
"https://images.whitney.rip/api/assets/f4c18690-b0fe-4ed1-a1d7-ea49b8828aa6/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1a8dd56a-3433-40ab-8619-f385560ee807/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fe1b66b4-4f98-43a3-bb26-6d4661d5ffe2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/787274d8-d94b-479c-9a11-b60f3ca3e640/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/91d11918-7471-4e81-b101-23511e14f45d/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/bfa43b2b-4aa1-4792-ab2f-aff1e226cdf0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/30273029-cba9-45a6-aa7c-3af27d0bd835/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/f7bfc5b1-6ef6-42ce-b4a2-237939b03ae9/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e29ce2a5-987c-4453-81f2-b2e7b161e7d2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/3082f0af-fb30-4e04-baae-5b47d310e380/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/15dd24ba-e2ae-4093-a098-988aac86e1e0/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fc6c3d20-2521-4d31-9f31-19476ad30a65/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8a750cc3-7bef-4bc6-9727-83151dead578/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4db2ea6d-8998-40df-bf05-fc27beeb2085/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ec92f32f-0c08-4317-b8e2-90c53c2e6416/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/7d5803ea-20b9-448f-9659-6fb801f15c68/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/dfb53a18-05dc-4cbc-bdd2-7f8b6f5a4e8e/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/e6934d1a-543c-4ed8-9c29-a94e915f9d94/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0e88d871-fc8e-4ac3-a96a-920fce3cc546/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/379a3b92-ff9b-4455-afe7-c2c6a8a270cd/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"/gallery/textures": {
|
||||||
|
"frontmatter": {
|
||||||
|
"template": "gallery",
|
||||||
|
"title": "Textures"
|
||||||
|
},
|
||||||
|
"content": "",
|
||||||
|
"images": [
|
||||||
|
"https://images.whitney.rip/api/assets/e03f66a6-a619-4624-a473-860026b3446a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4d759c78-64c8-4607-9b61-7d1f536fe98f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/0ff98add-0a3c-408b-af91-6320df62910f/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ce5eba3e-c444-4a20-a88a-92bfe56c6891/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/a837364d-ed8a-44cf-a8db-8db320bf81e6/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/8e254f41-7b14-48b3-ba98-a96fb9c05129/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1f877a0c-8e36-4751-b50a-5ea12c73aefc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/1979efcd-ba01-4194-b0f7-8e64a996c1cc/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/f4fcf415-7eb1-4131-8ef8-b0456aa31c62/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/4e440673-7294-48ac-99a4-05cc3fb07cd2/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/62baec73-487d-4a72-bdc4-7c168cf6f82a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/88cd4904-2ab1-4c60-b225-58d73945d724/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/dd59bec7-d922-4a53-af12-3f252c109d0d/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/d33762bc-1204-4f33-8e6f-2ea5bde72f1a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/fe4c9bf0-334b-40fb-9a44-8b1984e2818a/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/993736e1-a3ae-4ec5-8c67-c25c4c734f23/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/038e8d18-87cd-49f4-8e53-4c36a5f76cfb/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/994408ea-6f04-473f-84ea-de3c77265298/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/ddaf8248-7cdf-4e39-9639-d2826dc9d038/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D",
|
||||||
|
"https://images.whitney.rip/api/assets/214921e1-7b75-4059-ad53-1c1062f6df45/thumbnail?size=preview&key=3bkhzXZq8wkOQRjr58hDYLhenYNOyIDDCoq0tJ0G1nYOnJg04e-PLvFj9zJHEYV3ni8&c=iSbUaYtTBiWbtzPKIazyFcbZYFQ%3D"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
};
|
||||||
@ -1,5 +1,6 @@
|
|||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom/client';
|
import ReactDOM from 'react-dom/client';
|
||||||
|
import './theme/theme.css';
|
||||||
import './index.css';
|
import './index.css';
|
||||||
import App from './App';
|
import App from './App';
|
||||||
import reportWebVitals from './reportWebVitals';
|
import reportWebVitals from './reportWebVitals';
|
||||||
|
|||||||
5
src/plugins/index.js
Normal file
5
src/plugins/index.js
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
// Register custom templates here using registerTemplate from the framework.
|
||||||
|
// Example:
|
||||||
|
// import { registerTemplate } from '../framework/TemplateRegistry';
|
||||||
|
// import MyCustomTemplate from './MyCustomTemplate';
|
||||||
|
// registerTemplate('custom', MyCustomTemplate);
|
||||||
@ -3,3 +3,26 @@
|
|||||||
// expect(element).toHaveTextContent(/react/i)
|
// expect(element).toHaveTextContent(/react/i)
|
||||||
// learn more: https://github.com/testing-library/jest-dom
|
// learn more: https://github.com/testing-library/jest-dom
|
||||||
import '@testing-library/jest-dom';
|
import '@testing-library/jest-dom';
|
||||||
|
|
||||||
|
// react-router v7 requires TextEncoder/TextDecoder; polyfill for jsdom
|
||||||
|
const { TextEncoder, TextDecoder } = require('util');
|
||||||
|
if (typeof globalThis.TextEncoder === 'undefined') globalThis.TextEncoder = TextEncoder;
|
||||||
|
if (typeof globalThis.TextDecoder === 'undefined') globalThis.TextDecoder = TextDecoder;
|
||||||
|
|
||||||
|
// window.matchMedia is not implemented in jsdom
|
||||||
|
Object.defineProperty(window, 'matchMedia', {
|
||||||
|
writable: true,
|
||||||
|
value: jest.fn().mockImplementation(query => ({
|
||||||
|
matches: false,
|
||||||
|
media: query,
|
||||||
|
onchange: null,
|
||||||
|
addEventListener: jest.fn(),
|
||||||
|
removeEventListener: jest.fn(),
|
||||||
|
})),
|
||||||
|
});
|
||||||
|
|
||||||
|
// react-markdown v9 is ESM-only; mock it for jsdom tests
|
||||||
|
jest.mock('react-markdown', () => {
|
||||||
|
const React = require('react');
|
||||||
|
return ({ children }) => React.createElement('div', null, children);
|
||||||
|
});
|
||||||
|
|||||||
44
src/templates/ContactTemplate.css
Normal file
44
src/templates/ContactTemplate.css
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
.contact-container {
|
||||||
|
background-color: var(--color-bg);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-content {
|
||||||
|
width: 33%;
|
||||||
|
max-width: var(--content-max-width);
|
||||||
|
padding: var(--content-padding);
|
||||||
|
background-color: var(--color-bg-surface);
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.contact-content {
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-title {
|
||||||
|
color: var(--color-text);
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: var(--space-md);
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-item {
|
||||||
|
color: var(--color-text);
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-item a {
|
||||||
|
color: var(--color-text);
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.contact-item a:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
33
src/templates/ContactTemplate.js
Normal file
33
src/templates/ContactTemplate.js
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Helmet } from 'react-helmet';
|
||||||
|
import MarkdownRenderer from '../components/MarkdownRenderer';
|
||||||
|
import './ContactTemplate.css';
|
||||||
|
|
||||||
|
const ContactTemplate = ({ page }) => {
|
||||||
|
const { title, email, instagram } = page.frontmatter;
|
||||||
|
return (
|
||||||
|
<div className="contact-container">
|
||||||
|
<Helmet><title>{title}</title></Helmet>
|
||||||
|
<div className="contact-content">
|
||||||
|
<h1 className="contact-title">{title}</h1>
|
||||||
|
{email && (
|
||||||
|
<p className="contact-item">
|
||||||
|
Email: <a href={`mailto:${email}`}>{email}</a>
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
|
{instagram && (
|
||||||
|
<p className="contact-item">
|
||||||
|
Instagram: <a
|
||||||
|
href={`https://www.instagram.com/${instagram}`}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
>@{instagram}</a>
|
||||||
|
</p>
|
||||||
|
)}
|
||||||
|
{page.content && <MarkdownRenderer content={page.content} />}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default ContactTemplate;
|
||||||
40
src/templates/DefaultTemplate.css
Normal file
40
src/templates/DefaultTemplate.css
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
.default-container {
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
width: 100%;
|
||||||
|
min-height: 100vh;
|
||||||
|
background-color: var(--color-bg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.default-content {
|
||||||
|
width: 33%;
|
||||||
|
max-width: var(--content-max-width);
|
||||||
|
padding: var(--content-padding);
|
||||||
|
background-color: var(--color-bg-surface);
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
|
||||||
|
border-radius: var(--radius-lg);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 768px) {
|
||||||
|
.default-content {
|
||||||
|
width: 90%;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.default-profile-image {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
border-radius: 50%;
|
||||||
|
margin-bottom: var(--space-lg);
|
||||||
|
object-fit: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.default-title {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
margin-bottom: var(--space-sm);
|
||||||
|
color: var(--color-text);
|
||||||
|
font-family: var(--font-heading);
|
||||||
|
}
|
||||||
22
src/templates/DefaultTemplate.js
Normal file
22
src/templates/DefaultTemplate.js
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Helmet } from 'react-helmet';
|
||||||
|
import MarkdownRenderer from '../components/MarkdownRenderer';
|
||||||
|
import './DefaultTemplate.css';
|
||||||
|
|
||||||
|
const DefaultTemplate = ({ page }) => {
|
||||||
|
const { title, profileImage } = page.frontmatter;
|
||||||
|
return (
|
||||||
|
<div className="default-container">
|
||||||
|
<Helmet><title>{title}</title></Helmet>
|
||||||
|
<div className="default-content">
|
||||||
|
{profileImage && (
|
||||||
|
<img src={profileImage} alt={title} className="default-profile-image" />
|
||||||
|
)}
|
||||||
|
<h1 className="default-title">{title}</h1>
|
||||||
|
<MarkdownRenderer content={page.content} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
export default DefaultTemplate;
|
||||||
@ -2,7 +2,7 @@
|
|||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
background-color: #333;
|
background-color: var(--color-bg);
|
||||||
}
|
}
|
||||||
|
|
||||||
.gallery-photo {
|
.gallery-photo {
|
||||||
@ -14,9 +14,8 @@
|
|||||||
object-fit: cover;
|
object-fit: cover;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Responsive adjustments */
|
|
||||||
@media (max-width: 768px) {
|
@media (max-width: 768px) {
|
||||||
.gallery-photo {
|
.gallery-photo {
|
||||||
width: calc(100% - 10px); /* Single column on smaller screens */
|
width: calc(100% - 10px);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1,9 +1,8 @@
|
|||||||
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
import React, { useEffect, useMemo, useRef, useState } from 'react';
|
||||||
import Masonry from 'masonry-layout';
|
import Masonry from 'masonry-layout';
|
||||||
import images from '../data/Images';
|
|
||||||
import { Helmet } from 'react-helmet';
|
import { Helmet } from 'react-helmet';
|
||||||
import './Home.css';
|
import Lightbox from '../components/Lightbox';
|
||||||
import Lightbox from './Lightbox';
|
import './GalleryTemplate.css';
|
||||||
|
|
||||||
const shuffleArray = (array) => {
|
const shuffleArray = (array) => {
|
||||||
for (let i = array.length - 1; i > 0; i--) {
|
for (let i = array.length - 1; i > 0; i--) {
|
||||||
@ -13,12 +12,11 @@ const shuffleArray = (array) => {
|
|||||||
return array;
|
return array;
|
||||||
};
|
};
|
||||||
|
|
||||||
const Home = () => {
|
const GalleryTemplate = ({ page }) => {
|
||||||
const masonryRef = useRef(null);
|
const masonryRef = useRef(null);
|
||||||
const [focusedImage, setFocusedImage] = useState(null);
|
const [focusedImage, setFocusedImage] = useState(null);
|
||||||
|
|
||||||
// Compute once on mount; avoids a re-shuffle on every render
|
const shuffledImages = useMemo(() => shuffleArray([...page.images]), [page.images]);
|
||||||
const shuffledImages = useMemo(() => shuffleArray([...images]), []);
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const masonry = new Masonry(masonryRef.current, {
|
const masonry = new Masonry(masonryRef.current, {
|
||||||
@ -28,7 +26,6 @@ const Home = () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const relayout = () => masonry.layout();
|
const relayout = () => masonry.layout();
|
||||||
|
|
||||||
const imgElements = masonryRef.current.querySelectorAll('img');
|
const imgElements = masonryRef.current.querySelectorAll('img');
|
||||||
imgElements.forEach(img => img.addEventListener('load', relayout));
|
imgElements.forEach(img => img.addEventListener('load', relayout));
|
||||||
|
|
||||||
@ -40,10 +37,17 @@ const Home = () => {
|
|||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
|
<Helmet><title>{page.frontmatter.title}</title></Helmet>
|
||||||
<div className="gallery" ref={masonryRef}>
|
<div className="gallery" ref={masonryRef}>
|
||||||
<Helmet><title>Jake Runyan Photography</title></Helmet>
|
|
||||||
{shuffledImages.map((image) => (
|
{shuffledImages.map((image) => (
|
||||||
<img key={image} src={image} alt="© Jake Runyan" className="gallery-photo" style={{ cursor: 'pointer' }} onClick={() => setFocusedImage(image)} />
|
<img
|
||||||
|
key={image}
|
||||||
|
src={image}
|
||||||
|
alt="© Jake Runyan"
|
||||||
|
className="gallery-photo"
|
||||||
|
style={{ cursor: 'pointer' }}
|
||||||
|
onClick={() => setFocusedImage(image)}
|
||||||
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
{focusedImage && <Lightbox src={focusedImage} onClose={() => setFocusedImage(null)} />}
|
{focusedImage && <Lightbox src={focusedImage} onClose={() => setFocusedImage(null)} />}
|
||||||
@ -51,4 +55,4 @@ const Home = () => {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default Home;
|
export default GalleryTemplate;
|
||||||
91
src/templates/HomepageTemplate.css
Normal file
91
src/templates/HomepageTemplate.css
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
.homepage {
|
||||||
|
background-color: var(--color-bg);
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-hero {
|
||||||
|
text-align: center;
|
||||||
|
padding: 80px 20px 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-hero-title {
|
||||||
|
font-size: 3rem;
|
||||||
|
font-weight: 300;
|
||||||
|
letter-spacing: 0.05em;
|
||||||
|
color: var(--color-text);
|
||||||
|
margin: 0 0 var(--space-md) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-hero-subtitle {
|
||||||
|
text-transform: uppercase;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
letter-spacing: 0.15em;
|
||||||
|
font-size: 0.9rem;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-sections {
|
||||||
|
max-width: 1100px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 0 var(--content-padding) 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-section {
|
||||||
|
display: flex;
|
||||||
|
gap: var(--space-xl);
|
||||||
|
background-color: var(--color-bg-surface);
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
border-radius: var(--radius-md);
|
||||||
|
padding: var(--space-xl);
|
||||||
|
margin-bottom: 60px;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-section.image-right {
|
||||||
|
flex-direction: row-reverse;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-section-image {
|
||||||
|
flex: 0 0 45%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-section-image img {
|
||||||
|
width: 100%;
|
||||||
|
height: 300px;
|
||||||
|
object-fit: cover;
|
||||||
|
border-radius: var(--radius-sm);
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-section-text {
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-section-text h2 {
|
||||||
|
font-size: 1.6rem;
|
||||||
|
font-weight: 400;
|
||||||
|
color: var(--color-text);
|
||||||
|
margin: 0 0 var(--space-md) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-section-text p {
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
line-height: var(--line-height-body);
|
||||||
|
margin: 0 0 var(--space-sm) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media (max-width: 700px) {
|
||||||
|
.homepage-hero-title {
|
||||||
|
font-size: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-section,
|
||||||
|
.homepage-section.image-right {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.homepage-section-image {
|
||||||
|
flex: none;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
}
|
||||||
64
src/templates/HomepageTemplate.js
Normal file
64
src/templates/HomepageTemplate.js
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import './HomepageTemplate.css';
|
||||||
|
|
||||||
|
function parseSections(content) {
|
||||||
|
const parts = content.split(/^## /m);
|
||||||
|
return parts
|
||||||
|
.filter(part => part.trim())
|
||||||
|
.map(part => {
|
||||||
|
const lines = part.split('\n');
|
||||||
|
const heading = lines[0].trim();
|
||||||
|
const rest = lines.slice(1);
|
||||||
|
|
||||||
|
let imageUrl = null;
|
||||||
|
const textLines = [];
|
||||||
|
|
||||||
|
for (const line of rest) {
|
||||||
|
const imgMatch = line.match(/!\[.*?\]\((.*?)\)/);
|
||||||
|
if (imgMatch && !imageUrl) {
|
||||||
|
imageUrl = imgMatch[1];
|
||||||
|
} else if (line.trim()) {
|
||||||
|
textLines.push(line.trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { heading, imageUrl, textLines };
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function HomepageTemplate({ page }) {
|
||||||
|
const { frontmatter, content } = page;
|
||||||
|
const sections = parseSections(content);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="homepage">
|
||||||
|
<div className="homepage-hero">
|
||||||
|
<h1 className="homepage-hero-title">{frontmatter.title}</h1>
|
||||||
|
{frontmatter.subtitle && (
|
||||||
|
<p className="homepage-hero-subtitle">{frontmatter.subtitle}</p>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="homepage-sections">
|
||||||
|
{sections.map((section, i) => (
|
||||||
|
<div
|
||||||
|
key={i}
|
||||||
|
className={`homepage-section ${i % 2 === 0 ? 'image-left' : 'image-right'}`}
|
||||||
|
>
|
||||||
|
{section.imageUrl && (
|
||||||
|
<div className="homepage-section-image">
|
||||||
|
<img src={section.imageUrl} alt={section.heading} />
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
|
<div className="homepage-section-text">
|
||||||
|
<h2>{section.heading}</h2>
|
||||||
|
{section.textLines.map((line, j) => (
|
||||||
|
<p key={j}>{line}</p>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
68
src/templates/MenuTemplate.css
Normal file
68
src/templates/MenuTemplate.css
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
.menu-page {
|
||||||
|
background-color: var(--color-bg);
|
||||||
|
min-height: 100vh;
|
||||||
|
padding: 60px var(--content-padding) 60px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-header {
|
||||||
|
text-align: center;
|
||||||
|
margin-bottom: var(--space-xl);
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-header h1 {
|
||||||
|
font-size: 2.5rem;
|
||||||
|
font-weight: 300;
|
||||||
|
color: var(--color-text);
|
||||||
|
margin: 0 0 var(--space-md) 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-description {
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
font-size: 1rem;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-grid {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
|
||||||
|
max-width: 900px;
|
||||||
|
margin: 0 auto;
|
||||||
|
gap: var(--space-lg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-card {
|
||||||
|
background-color: var(--color-bg-surface);
|
||||||
|
border: 1px solid var(--color-border);
|
||||||
|
border-radius: var(--radius-md);
|
||||||
|
padding: var(--space-md);
|
||||||
|
text-decoration: none;
|
||||||
|
display: block;
|
||||||
|
transition: transform var(--transition-fast), border-color var(--transition-fast);
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-card:hover {
|
||||||
|
transform: translateY(-2px);
|
||||||
|
border-color: var(--color-accent);
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-card-image {
|
||||||
|
width: 100%;
|
||||||
|
height: 180px;
|
||||||
|
object-fit: cover;
|
||||||
|
border-radius: var(--radius-sm);
|
||||||
|
margin-bottom: var(--space-md);
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-card-title {
|
||||||
|
color: var(--color-text);
|
||||||
|
font-size: 1.3rem;
|
||||||
|
font-weight: 400;
|
||||||
|
margin-bottom: var(--space-sm);
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu-card-desc {
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
font-size: 0.9rem;
|
||||||
|
line-height: var(--line-height-body);
|
||||||
|
}
|
||||||
83
src/templates/MenuTemplate.js
Normal file
83
src/templates/MenuTemplate.js
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
import React from 'react';
|
||||||
|
import { Link } from 'react-router-dom';
|
||||||
|
import './MenuTemplate.css';
|
||||||
|
|
||||||
|
function parseMenuItems(content) {
|
||||||
|
const parts = content.split(/^## /m);
|
||||||
|
return parts
|
||||||
|
.filter(part => part.trim())
|
||||||
|
.map(part => {
|
||||||
|
const lines = part.split('\n');
|
||||||
|
const headingLine = lines[0].trim();
|
||||||
|
const rest = lines.slice(1);
|
||||||
|
|
||||||
|
// Extract label + path from [Label](path), fallback to plain text
|
||||||
|
const linkMatch = headingLine.match(/^\[(.+?)\]\((.+?)\)/);
|
||||||
|
const label = linkMatch ? linkMatch[1] : headingLine;
|
||||||
|
const path = linkMatch ? linkMatch[2] : null;
|
||||||
|
|
||||||
|
let imageUrl = null;
|
||||||
|
const descLines = [];
|
||||||
|
|
||||||
|
for (const line of rest) {
|
||||||
|
const imgMatch = line.match(/!\[.*?\]\((.*?)\)/);
|
||||||
|
if (imgMatch && !imageUrl) {
|
||||||
|
imageUrl = imgMatch[1];
|
||||||
|
} else if (line.trim()) {
|
||||||
|
descLines.push(line.trim());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { label, path, imageUrl, desc: descLines.join(' ') };
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function MenuTemplate({ page }) {
|
||||||
|
const { frontmatter, content } = page;
|
||||||
|
const items = parseMenuItems(content);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<div className="menu-page">
|
||||||
|
<div className="menu-header">
|
||||||
|
<h1>{frontmatter.title}</h1>
|
||||||
|
{frontmatter.description && (
|
||||||
|
<p className="menu-description">{frontmatter.description}</p>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div className="menu-grid">
|
||||||
|
{items.map((item, i) => (
|
||||||
|
item.path ? (
|
||||||
|
<Link key={i} to={item.path} className="menu-card">
|
||||||
|
{item.imageUrl && (
|
||||||
|
<img
|
||||||
|
className="menu-card-image"
|
||||||
|
src={item.imageUrl}
|
||||||
|
alt={item.label}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
<div className="menu-card-title">{item.label}</div>
|
||||||
|
{item.desc && (
|
||||||
|
<div className="menu-card-desc">{item.desc}</div>
|
||||||
|
)}
|
||||||
|
</Link>
|
||||||
|
) : (
|
||||||
|
<div key={i} className="menu-card">
|
||||||
|
{item.imageUrl && (
|
||||||
|
<img
|
||||||
|
className="menu-card-image"
|
||||||
|
src={item.imageUrl}
|
||||||
|
alt={item.label}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
|
<div className="menu-card-title">{item.label}</div>
|
||||||
|
{item.desc && (
|
||||||
|
<div className="menu-card-desc">{item.desc}</div>
|
||||||
|
)}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
))}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
}
|
||||||
28
src/theme/theme.css
Normal file
28
src/theme/theme.css
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
:root {
|
||||||
|
--color-bg: #333;
|
||||||
|
--color-bg-surface: #222;
|
||||||
|
--color-bg-nav: #0b0b0b;
|
||||||
|
--color-text: #f5f5f5;
|
||||||
|
--color-text-muted: #999;
|
||||||
|
--color-text-nav: #fff;
|
||||||
|
--color-text-footer: #808080;
|
||||||
|
--color-border: #000;
|
||||||
|
--color-accent: #fff;
|
||||||
|
--font-body: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
||||||
|
--font-heading: 'Arial', sans-serif;
|
||||||
|
--font-size-base: 16px;
|
||||||
|
--line-height-body: 1.6;
|
||||||
|
--nav-height: 70px;
|
||||||
|
--content-max-width: 800px;
|
||||||
|
--content-padding: 20px;
|
||||||
|
--space-xs: 4px;
|
||||||
|
--space-sm: 8px;
|
||||||
|
--space-md: 16px;
|
||||||
|
--space-lg: 24px;
|
||||||
|
--space-xl: 40px;
|
||||||
|
--radius-sm: 4px;
|
||||||
|
--radius-md: 8px;
|
||||||
|
--radius-lg: 10px;
|
||||||
|
--transition-fast: 0.2s ease;
|
||||||
|
--transition-base: 0.3s ease;
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user