├── .env.example ├── .eslintrc.json ├── .gitignore ├── .node-version ├── .pages.yml ├── .prettierignore ├── .prettierrc.json ├── .vscode └── settings.json ├── README.md ├── _content ├── notes │ ├── ai-marketing-is-dumb.mdx │ ├── busyness-paradoxically-is-a-form-of-laziness-lazy-thinking-or-no-thinking-at-all-just-an-acceptance-that-busy-is-where-we-should-be.mdx │ ├── church-is-an-icu-for-sinners.mdx │ ├── either-write-something-worth-reading-or-do-something-worth-writing.mdx │ ├── jd-vance-the-only-way-to-reject-white-privilege.mdx │ ├── men-that-have-no-household.mdx │ ├── not-sorry.mdx │ ├── phone-calls-vs-text.mdx │ └── politicans-are-gaslighting-us.mdx ├── posts │ ├── an-excerpt-on-old-testament-law.mdx │ ├── can-christians-go-to-war.mdx │ ├── christians-can-not-vote-the-country-into-what-they-want-to-see.mdx │ ├── does-god-change-his-mind.mdx │ ├── elders-and-pastors-should-be-good-with-money.mdx │ ├── freedom-isnt-freedom.mdx │ ├── homosexuality-what-does-the-bible-say.mdx │ ├── how-to-have-a-secure-election.mdx │ ├── is-gods-love-reckless.mdx │ ├── is-suicide-sinful.mdx │ ├── ive-been-inspired-by-a-goofy-movie.mdx │ ├── jesus-is-alive.mdx │ ├── monitor-windows-with-grafana-and-prometheus.mdx │ ├── react-based-age-calculator.mdx │ ├── resize-a-proxmox-virtual-machine.mdx │ ├── should-we-forgive-ourselves.mdx │ ├── the-death-penalty-a-christian-perspective.mdx │ ├── the-doctrines-of-grace.mdx │ ├── the-four-views-of-the-human-ability.mdx │ ├── the-limitations-of-natural-revelation.mdx │ ├── the-propitiation-of-jesus-is-not-paganism.mdx │ ├── the-vine-and-the-branch.mdx │ ├── thoughts-on-bojack-horseman.mdx │ ├── we-should-care-more-about-learning-how-to-think-versus-cramming-information.mdx │ ├── what-is-common-grace.mdx │ └── work-life-balance.mdx └── videos │ ├── amarus-revenge.mdx │ ├── ballo-moments.mdx │ ├── balls-of-steel.mdx │ ├── best-zsu-driver-confirmed.mdx │ ├── bigger-and-better-memes.mdx │ ├── birb.mdx │ ├── breach-and-clear.mdx │ ├── bridge-explosion.mdx │ ├── brr-brr.mdx │ ├── chad-spg.mdx │ ├── chain-gunner-attachment.mdx │ ├── charge.mdx │ ├── cheeky-roleplay.mdx │ ├── cherries-and-berries.mdx │ ├── chinchilla-melon-festival.mdx │ ├── counting.mdx │ ├── dayum-boi.mdx │ ├── f-for-vulkan-and-sodel.mdx │ ├── freeballing-it.mdx │ ├── get-rotated-idiot.mdx │ ├── glitterbeards-cave.mdx │ ├── gun-go-brr.mdx │ ├── han-the-man.mdx │ ├── hardcore-parkour.mdx │ ├── hawaiian-has-rickets.mdx │ ├── hello-ive-arrived.mdx │ ├── hello-there.mdx │ ├── i-love-this-game-sometimes-hehe.mdx │ ├── i-should-have-been-more-concerned.mdx │ ├── i-spent-most-of-this-mission-dead.mdx │ ├── im-going-to-glass-this-place.mdx │ ├── infinite-bullets-glitch.mdx │ ├── instant-death.mdx │ ├── itkatsumore.mdx │ ├── javwin.mdx │ ├── kapow.mdx │ ├── leap-of-faith.mdx │ ├── learn-to-drive.mdx │ ├── my-heart.mdx │ ├── my-useless-10-10-drop.mdx │ ├── never-jump-walls-in-an-enemy-ao.mdx │ ├── off-to-war.mdx │ ├── orenjis-boo-boo.mdx │ ├── out-of-ammo-run-him-down.mdx │ ├── panzerfaust-time.mdx │ ├── patience-is-key.mdx │ ├── pew-pew-pew.mdx │ ├── pistols-and-shotguns-are-cracked.mdx │ ├── quick-flip.mdx │ ├── rampage.mdx │ ├── raw-driving-skill.mdx │ ├── schwacked.mdx │ ├── some-questionable-tactics.mdx │ ├── spinbot-3000.mdx │ ├── tank-engagements.mdx │ ├── teamspeak-shenanigans.mdx │ ├── that-was-cracked.mdx │ ├── they-see-me-rollin.mdx │ ├── theyre-what.mdx │ ├── toaster-bath-is-a-good-driver.mdx │ ├── tt-german-rumble.mdx │ ├── vehicular-confusion.mdx │ ├── what-a-round.mdx │ ├── what-even-is-a-straight-line-anyway.mdx │ ├── what-plane-is-this.mdx │ ├── whats-a-grief-and-beef.mdx │ ├── wheres-my-boonie-hat.mdx │ ├── why-arent-they-shooting-him.mdx │ ├── you-wanna-see-some-magic.mdx │ ├── zero-operational-awareness.mdx │ ├── zoomin.mdx │ ├── zsu-operation-baited-traps.mdx │ ├── zsu-operation-bay-of-goats.mdx │ ├── zsu-operation-blitzkrieg.mdx │ ├── zsu-operation-bridge-baby.mdx │ ├── zsu-operation-burning-pine.mdx │ ├── zsu-operation-derailed.mdx │ ├── zsu-operation-genesis.mdx │ ├── zsu-operation-guiding-serpent.mdx │ ├── zsu-operation-krugertown.mdx │ ├── zsu-operation-mud-washer-pt-2.mdx │ ├── zsu-operation-outlast.mdx │ ├── zsu-operation-overblown.mdx │ ├── zsu-operation-peoples-highway.mdx │ ├── zsu-operation-poached-eggs.mdx │ ├── zsu-operation-serpent-slayer.mdx │ ├── zsu-operation-temporal-harvest.mdx │ └── zsu-operation-tzatziki-flip-2-electric-boogaloo.mdx ├── app ├── about │ ├── page.tsx │ └── uses │ │ └── page.tsx ├── api │ ├── page-stats │ │ └── route.ts │ ├── spotify │ │ ├── top-artists │ │ │ └── route.ts │ │ └── top-tracks │ │ │ └── route.ts │ ├── subscribe │ │ └── route.ts │ └── visitors │ │ └── route.ts ├── colophon │ └── page.tsx ├── favicon.ico ├── globals.css ├── layout.tsx ├── not-found.tsx ├── page.tsx ├── robots.ts ├── sitemap.ts ├── timeline │ ├── [slug] │ │ └── page.tsx │ └── page.tsx ├── video │ └── [slug] │ │ └── page.tsx ├── videos │ └── page.tsx └── work │ └── page.tsx ├── bun.lockb ├── components.json ├── components ├── age.tsx ├── animated-gradient-text.tsx ├── animated-signature.tsx ├── books.tsx ├── call-to-faith.tsx ├── copy-link.tsx ├── copy-text.tsx ├── definition.tsx ├── footer.tsx ├── image-with-details.tsx ├── lanyard.tsx ├── link-with-icon.tsx ├── magicui │ ├── blur-fade.tsx │ └── blur-in.tsx ├── music.tsx ├── navigation │ ├── navigation-client.tsx │ └── navigation.tsx ├── now-playing.tsx ├── player.tsx ├── posts.tsx ├── retrieve-ip.tsx ├── return-to-index.tsx ├── side-note.tsx ├── subscribe.tsx ├── theme-provider.tsx ├── toc.tsx ├── ui │ ├── accordion.tsx │ ├── badge.tsx │ ├── button.tsx │ ├── carousel.tsx │ ├── drawer.tsx │ ├── dropdown-menu.tsx │ ├── hover-card.tsx │ ├── input.tsx │ ├── label.tsx │ ├── popover.tsx │ ├── separator.tsx │ ├── table.tsx │ ├── textarea.tsx │ ├── toast.tsx │ ├── toaster.tsx │ ├── tooltip.tsx │ └── use-toast.ts └── videos.tsx ├── contentlayer.config.ts ├── fonts ├── britney-variable.woff2 ├── gambarino-regular.woff2 ├── generalsans-variable.woff2 ├── manrope-variable.woff2 ├── redhatdisplay-variable.woff2 ├── satoshi-variable.woff2 ├── supreme-variable.woff2 ├── switzer-variable.woff2 └── worksans-variable.woff2 ├── lib ├── get-analytics.ts ├── spotify.ts ├── umami.ts └── utils.ts ├── next.config.mjs ├── package.json ├── postcss.config.js ├── prettier.config.js ├── public ├── arrow-top-right.svg ├── avatar-cropped.avif ├── avatar.avif ├── logos │ ├── conetix.png │ ├── dev-demand.png │ ├── pixel-zoo.svg │ └── rsp.svg ├── media │ ├── 0f92b16b782807c21c8bdae5c7316e84.jpg │ ├── 404.webp │ ├── GTqrSb_XgAElJZg.jpeg │ ├── P1011186_qkrix9.webp │ ├── a-goofy-movie-2000-af1010c308e44155a276e0f67b07f166.jpg │ ├── a-goofy-movie-max-big-foot-and-goofy.jpg │ ├── arnaud-jaegers-IBWJsMObnnU-unsplash.jpg │ ├── artem-sapegin-8c6eS43iq1o-unsplash.jpg │ ├── bing-hui-yau-08t_sI5Al_0-unsplash.jpg │ ├── bojack-horseman-2020-4k-g9-3840x2400.jpg │ ├── cecilie-johnsen-G8CxFhKuPDU-unsplash.jpg │ ├── deann-dasilva-0jIg_-j_tTc-unsplash.jpg │ ├── ducktales-a-goofy-movie-powerline-1213971-1280x0-1.jpeg │ ├── haddon-institute-gang.avif │ ├── haddon.avif │ ├── hasan-almasi-aIRBGPafi74-unsplash.jpg │ ├── hugues-de-buyer-mimeure--wT0iS-TSZM-unsplash(1).jpg │ ├── ioann-mark-kuznietsov-USS2u1-98io-unsplash.jpg │ ├── konrad-hofmann-DjlYzy7zkP8-unsplash.jpg │ ├── mccall-alexander-W7HQQpi80AA-unsplash.jpg │ ├── nico-smit-O9BJvRG-0Zo-unsplash.avif │ ├── nikko-macaspac-6SNbWyFwuhk-unsplash.jpg │ ├── patrick-fore-b_SHPU5M3nk-unsplash.jpg │ ├── pepi-stojanovski-MJSFNZ8BAXw-unsplash.jpg │ ├── pinky-and-the-brain.jpg │ ├── priscilla-du-preez-7aOhiPe6_30-unsplash.jpg │ ├── proxmox-logo-header.webp │ ├── shutterstock_478486123_ railway_fx.jpg │ ├── sixteen-miles-out-L-mNqn89I2s-unsplash.jpg │ ├── tomb.avif │ └── wright-brand-bacon-VVtVBLKkrik-unsplash.jpg ├── projects │ ├── 61-oaks-group.avif │ ├── haddon-institute.avif │ ├── sdelta.avif │ ├── simply-photos.avif │ ├── star-compass.avif │ ├── the-armoury-bookshop.avif │ └── zsu.avif ├── recommended-books │ ├── christian-nationalism.avif │ ├── confessions-of-a-food-catholic.avif │ ├── fight-by-flight.avif │ ├── future-men.avif │ ├── how-to-read-a-book.avif │ ├── it's-good-to-be-a-man.avif │ ├── live-like-a-narnian.avif │ ├── mere-christendom.avif │ ├── mere-christianity.avif │ ├── the-case-for-christian-nationalism.avif │ ├── the-chronicles-of-narnia.avif │ ├── the-screwtape-letters.avif │ └── what-i-learned-in-narnia.avif ├── roadtrip │ ├── Friendsville.avif │ ├── P1011152_t1mdns.avif │ ├── P1011186_qkrix9.avif │ ├── P1011212_xh4oep.avif │ ├── P1011348_ugskcv.avif │ └── P1011435_hgzmov.avif └── showcase │ ├── 61-oaks-group.png │ ├── haddon-institute.png │ ├── livestream.png │ ├── simply-photos.png │ ├── star-compass.png │ └── the-armoury-bookshop.png ├── tailwind.config.ts └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- 1 | # SPOTIFY TRACKING 2 | SPOTIFY_REFRESH_TOKEN= 3 | SPOTIFY_CLIENT_SECRET= 4 | SPOTIFY_CLIENT_ID= 5 | 6 | # ANALYTICS 7 | NEXT_PUBLIC_UMAMI_SCRIPT_URL= 8 | NEXT_PUBLIC_UMAMI_WEBSITE_ID= 9 | UMAMI_URL= 10 | UMAMI_USERNAME= 11 | UMAMI_PASSWORD= 12 | 13 | # CLOUDINARY GALLERY 14 | CLOUDINARY_CLOUD_NAME= 15 | CLOUDINARY_API_KEY= 16 | CLOUDINARY_API_SECRET= 17 | 18 | # GENERAL 19 | NEXT_PUBLIC_VERCEL_URL="http://localhost:3000" 20 | PAGE_URL="http://localhost:3000" 21 | 22 | # BEEHIIV 23 | BEEHIIV_API_KEY= 24 | PUBLICATION_ID= 25 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | /.pnp 4 | .pnp.js 5 | .yarn/install-state.gz 6 | 7 | # testing 8 | /coverage 9 | 10 | # next.js 11 | /.next/ 12 | /out/ 13 | 14 | # production 15 | /build 16 | 17 | # misc 18 | .DS_Store 19 | *.pem 20 | 21 | # debug 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | 26 | # local env files 27 | .env*.local 28 | .env 29 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | 37 | # contentlayer 38 | .contentlayer -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 23.7.0 -------------------------------------------------------------------------------- /.pages.yml: -------------------------------------------------------------------------------- 1 | media: 2 | input: public/media 3 | output: media 4 | content: 5 | - name: posts 6 | label: Posts 7 | path: _content 8 | type: collection 9 | view: 10 | fields: [title, tag, date] 11 | fields: 12 | - { name: title, label: Title, type: string } 13 | - { name: date, label: Date, type: date } 14 | - { name: tag, label: Tag, type: string } 15 | - { 16 | name: description, 17 | label: Description, 18 | type: string, 19 | options: { maxlength: 160 }, 20 | } 21 | - { name: image, label: Image, type: image } 22 | - { name: imageAlt, label: Image Attribute, type: string } 23 | - { name: body, label: Body, type: rich-text } 24 | - { name: lastModified, label: Last Updated, type: date } 25 | - { name: signature, label: Signature, type: boolean, default: false } 26 | - { 27 | name: type, 28 | label: type, 29 | type: select, 30 | options: { values: [Post, Video] }, 31 | } 32 | filename: "{primary}.mdx" 33 | - name: videos 34 | label: Videos 35 | path: _content 36 | type: collection 37 | view: 38 | fields: [title, date, tag] 39 | fields: 40 | - { name: title, label: Title, type: string } 41 | - { name: date, label: Date, type: date } 42 | - { name: tag, label: Tag, type: string } 43 | - { 44 | name: description, 45 | label: Description, 46 | type: string, 47 | options: { maxlength: 160 }, 48 | } 49 | - { name: videoUrl, label: Video URL, type: string } 50 | - { name: duration, label: Duration, type: string } 51 | - { 52 | name: type, 53 | label: type, 54 | type: select, 55 | options: { values: [Post, Video] }, 56 | } 57 | filename: "{primary}.mdx" 58 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | # dependencies 2 | /node_modules 3 | /.pnp 4 | .pnp.js 5 | .yarn/install-state.gz 6 | 7 | # testing 8 | /coverage 9 | 10 | # next.js 11 | /.next/ 12 | /out/ 13 | 14 | # production 15 | /build 16 | 17 | # misc 18 | .DS_Store 19 | *.pem 20 | 21 | # debug 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | 26 | # local env files 27 | .env*.local 28 | .env 29 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript.tsdk": "node_modules/typescript/lib", 3 | "typescript.enablePromptUseWorkspaceTsdk": true, 4 | "editor.codeActionsOnSave": { 5 | "source.fixAll": "explicit", 6 | "source.organizeImports": "explicit", 7 | "source.sortMembers": "explicit" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ✍️ Blog 2 | 3 | Built with Next.js, PagesCMS, Tailwind, shadcn, Framer Motion, Mux. 4 | 5 | ## 🚀 Install 6 | 7 | To get started locally running the project: 8 | 9 | ```bash 10 | # Clone the repository 11 | git clone https://github.com/zpuckeridge/blog 12 | 13 | # Copy the .env.example and make the relevant changes 14 | cp .env.example .env.local 15 | 16 | # Install packages 17 | bun install 18 | 19 | # Run the server 20 | bun run dev 21 | ``` 22 | 23 | ## 🚩 Features 24 | 25 | - 📝 PagesCMS 26 | - 📈 Umami Analytics 27 | - ⚡ Tags 28 | - 🎶 Spotify Now Playing Widget 29 | - 🧭 Discord Status 30 | - Side Notes 31 | - Inline Definitions 32 | - Table of Contents 33 | - Styled Footnotes 34 | - Videos (Mux) 35 | - Time to read estimate 36 | - Copy Link 37 | - Newsletter Integration (Beehiiv) 38 | - Carbon Rating of A 39 | 40 | ## 👀 Coming soon 41 | 42 | - Tag Page 43 | - Article Search 44 | - Public Statistics Page 45 | - Page Speed Insights 46 | - Improved Syntax Highlighting 47 | - Setup Resources section, track uses/apps/blogs/typefaces/etc. managed by PagesCMS. 48 | - Setup a Resume page 49 | - Fix article typography 50 | -------------------------------------------------------------------------------- /_content/notes/ai-marketing-is-dumb.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: AI-generated marketing is dumb 3 | date: 2025-05-21 4 | type: Note 5 | tag: AI 6 | --- 7 | 8 | AI-generated marketing is like a toddler with a thesaurus and a Red Bull addiction trying to sell you a used car. It’s loud, it’s chaotic, it’s full of buzzwords it doesn’t understand, and you’re left wondering if it’s trying to scam you or just genuinely confused about what it’s selling. 9 | -------------------------------------------------------------------------------- /_content/notes/busyness-paradoxically-is-a-form-of-laziness-lazy-thinking-or-no-thinking-at-all-just-an-acceptance-that-busy-is-where-we-should-be.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Busyness, paradoxically, is a form of laziness. Lazy thinking, or no 3 | thinking at all. Just an acceptance that busy is where we should be 4 | date: 2024-08-27 5 | type: Note 6 | tag: Quote 7 | --- 8 | 9 | "Busyness, paradoxically, is a form of laziness. Lazy thinking, or no thinking at all. Just an acceptance that busy is where we should be." — Carl Phillips 10 | -------------------------------------------------------------------------------- /_content/notes/church-is-an-icu-for-sinners.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Church is an ICU for sinners 3 | date: 2024-09-06 4 | type: Note 5 | tag: Quote 6 | --- 7 | 8 | "Church is an ICU for sinners." — Douglas Wilson 9 | -------------------------------------------------------------------------------- /_content/notes/either-write-something-worth-reading-or-do-something-worth-writing.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Either write something worth reading or do something worth writing 3 | date: 2024-07-30 4 | type: Note 5 | tag: Quote 6 | --- 7 | 8 | "Either write something worth reading or do something worth writing." — Benjamin Franklin 9 | -------------------------------------------------------------------------------- /_content/notes/jd-vance-the-only-way-to-reject-white-privilege.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Becoming trans is the only way to reject white privilege 3 | date: 2024-11-01 4 | type: Note 5 | tag: Quote 6 | --- 7 | 8 | "[I wonder] if there is a dynamic going on where if you become trans, that is the way to reject your white privilege. That's the social signifier, the only one that's available in the hyper woke mindset is if you become gender non-binary." — JD Vance 9 | -------------------------------------------------------------------------------- /_content/notes/men-that-have-no-household.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Men without land, a home, a wife or a business are not worth listening to. 3 | date: 2025-05-19 4 | type: Note 5 | tag: Lesson 6 | --- 7 | 8 | Men without land, a home, a wife or a business are not worth listening to. 9 | -------------------------------------------------------------------------------- /_content/notes/not-sorry.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: I'm a White Australian and I'm not sorry 3 | date: 2025-05-26 4 | type: Note 5 | tag: Politics 6 | --- 7 | 8 | I'm not sorry that Australia was colonised. 9 | 10 | I'm not sorry about the stolen generation. 11 | 12 | I'm not ashamed to be Australian, or of my English heritage. 13 | 14 | And I don't need to be welcomed to the country my people built. 15 | 16 | Australia is for Australians. 17 | -------------------------------------------------------------------------------- /_content/notes/phone-calls-vs-text.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Phone calls vs text 3 | date: 2025-03-13 4 | type: Note 5 | tag: Lesson 6 | --- 7 | 8 | One of the biggest things I’ve had to learn moving away from a purely technical role is that a quick phone call is 100x more efficient and reliable than text. 9 | 10 | Non-technical people do not read messages. At all. 11 | -------------------------------------------------------------------------------- /_content/notes/politicans-are-gaslighting-us.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Politicians are blatantly gaslighting us on housing 3 | date: 2025-03-10 4 | type: Note 5 | tag: Politics 6 | --- 7 | 8 | Politicians say the number of homes being built is the problem. Not the mass unchecked immigration. 9 | 10 | That importing more workers to build them faster is the solution. 11 | 12 | They don't seem to realise that the more people you bring in, the more houses you need to build - exacerbating the problem even further. Not to mention the additional strain on other resources (i.e. hospitals, schools etc.) 13 | 14 | The solution is simple. 15 | 16 | Stop the mass unchecked immigration. 17 | -------------------------------------------------------------------------------- /_content/posts/can-christians-go-to-war.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Can Christians go to War? 3 | date: 2023-10-26 4 | tag: Faith 5 | description: How should Christians respond to the stirrings or war? Do we simply 6 | refuse to participate? Or do we do our duty and fight for our country? 7 | image: media/bing-hui-yau-08t_sI5Al_0-unsplash.jpg 8 | imageAlt: Photo by Bing Hui Yau on Unsplash 9 | lastModified: 2024-10-14 10 | signature: true 11 | type: Post 12 | --- 13 | 14 | What is the appropriate Christian response to the onset of conflict or war? Should we opt out of participation altogether, or fulfill our duty by defending our nation? This article serves as an introductory guide to help Christians navigate the complexities of wartime and determine the most ethical course of action. 15 | 16 | God has given the civil magistrate "the sword" to punish wrongdoers. Consider what Paul says in Romans 13:4-7: 17 | 18 | > For the one in authority is God’s servant for your good. But if you do wrong, be afraid, for rulers do not bear the sword for no reason. They are God’s servants, agents of wrath to bring punishment on the wrongdoer. Therefore, it is necessary to submit to the authorities, not only because of possible punishment but also as a matter of conscience. This is also why you pay taxes, for the authorities are God’s servants, who give their full time to governing. Give to everyone what you owe them: If you owe taxes, pay taxes; if revenue, then revenue; if respect, then respect; if honour, then honour. 19 | 20 | God has granted rulers the authority to enforce their laws through coercion, including measures such as capital punishment and engaging in warfare. Throughout history, this authority has been wielded for both righteous and unjust causes. When it comes to Christians participating in war, various perspectives exist: 21 | 22 | 1. Pure pacifism advocates for complete nonviolence under any circumstance. 23 | 2. Blind nationalism reflects an uncritical allegiance to one's country, believing it can do no wrong. 24 | 3. Finally, the concept of a "just war" suggests that some conflicts may be morally justified under certain conditions. 25 | 26 | # Pure Pacifism 27 | 28 | This position holds the opinion that no Christian may ever take up arms in self-defence. This includes the defence of one's country, and of themselves. While they are correct in understanding that Christians are called to be pacifists in the sense that we love peace and pursue it, they fail to take into account that the Bible has said that we are permitted to defend ourselves and our families. Consider Exodus 22 and Luke 22:35-37: 29 | 30 | > If a thief is caught breaking in at night and is struck a fatal blow, the defender is not guilty of bloodshed. 31 | 32 | — Exodus 22:2 33 | 34 | > Then Jesus asked them, “When I sent you without purse, bag or sandals, did you lack anything? “Nothing,” they answered. He said to them, “But now if you have a purse, take it, and also a bag; and if you don’t have a sword, sell your cloak and buy one. It is written: ‘And he was numbered with the transgressors’; and I tell you that this must be fulfilled in me. Yes, what is written about me is reaching its fulfilment. 35 | 36 | — Luke 22:35-37 37 | 38 | # Blind Nationalism 39 | 40 | This position holds the opinion that because God has bestowed the power of the sword on the state, that they must be obeyed at all times. In many ways, people that hold this position worship the state as in their eyes, they believe that it can do no wrong. This position fails to take into account that human nature is fundamentally corruptible, and that no system is perfect. We are also called to civil disobedience when our leaders inevitably start to follow a path of corruption or evil. See 1 Kings 18, Joshua 2, Exodus 1, 1 Samuel 14:45, Acts 4:19-20 and Acts 5:29. 41 | 42 | I think civil disobedience might be better summed up in its own article, as there is a lot to unpack there. 43 | 44 | # The Just War 45 | 46 | The concept of a just war falls between the extremes of pure pacifism and blind nationalism and has been endorsed by numerous Christian thinkers throughout history, including Augustine, Constantine, Thomas Aquinas, and John Calvin. 47 | 48 | What distinguishes a just war? Essentially, it should be declared with solemnity, by a legitimate God fearing and righteous authority, as a last resort with a reasonable chance of success, and with careful restraint in the methods employed. Most importantly, the potential outcome should justify the costs incurred. 49 | 50 | Christians are called to oppose wars driven by aggression, which stem from hatred and fear, emotions exploited by adversaries to divide us. A just war is defensive in nature, and it is honourable to defend one's borders against aggressors. 51 | 52 | However, putting this principle into practice is challenging amidst the fog of war and the distortions of information and propaganda. It necessitates mournful prayer, fasting, and scriptural reflection to discern God's will. Christians must act with caution and strive to maintain moral integrity in all actions. 53 | -------------------------------------------------------------------------------- /_content/posts/christians-can-not-vote-the-country-into-what-they-want-to-see.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Christians can not vote the country into what they want to see 3 | date: 2024-07-09 4 | tag: Faith 5 | description: They must go out and witness to the lost. 6 | lastModified: 2024-07-26 7 | signature: true 8 | type: Post 9 | --- 10 | 11 | They must go out and witness to the lost. Nations rise and fall as God judges them. To be a faithful Christian is to evangelise the lost and see souls saved—only then will we see a nations morality improve. 12 | -------------------------------------------------------------------------------- /_content/posts/elders-and-pastors-should-be-good-with-money.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Elders and pastors should be good with money 3 | date: 2024-07-26 4 | tag: Faith 5 | description: Do your elders manage their households well? 6 | image: media/pepi-stojanovski-MJSFNZ8BAXw-unsplash.jpg 7 | imageAlt: Photo by Pepi Stojanovski on Unsplash 8 | lastModified: 2024-10-23 9 | signature: true 10 | type: Post 11 | --- 12 | 13 | [Do your elders manage their households well?](https://x.com/PerfInjust/status/1814819350768914771) And no, I'm not just talking about the relationships between their wife and children, but also their finances, their conduct and general wisdom. Are they above [reproach](https://www.merriam-webster.com/dictionary/reproach)? 14 | 15 | If we are to entrust our elders to the finances of the church, the tithe and other financial decisions, then it is reasonable to expect them to have a decent understanding of realestate, economics and almost certainly politics. How else could they come to a well reasoned conclusion about a specific direction the church should take? 16 | 17 | > "The saying is trustworthy: If anyone aspires to the office of overseer, he desires a noble task. Therefore an overseer must be above reproach, the husband of one wife, sober-minded, self-controlled, respectable, hospitable, able to teach, not a drunkard, not violent but gentle, not quarrelsome, not a lover of money. He must manage his own household well, with all dignity keeping his children submissive, for if someone does not know how to manage his own household, how will he care for God's church? He must not be a recent convert, or he may become puffed up with conceit and fall into the condemnation of the devil. Moreover, he must be well thought of by outsiders, so that he may not fall into disgrace, into a snare of the devil." — 1 Timothy 3:1-7 18 | 19 | I would argue that we should definitely look to our elders when it comes to these things. Why else would we have elected them? 20 | 21 | I'm not arguing that the elder should be an economist or expert on foreign policy, merely that he would be aware of these things and have a good understanding of how they can affect his flock. 22 | -------------------------------------------------------------------------------- /_content/posts/freedom-isnt-freedom.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: '"Freedom" isn''t freedom' 3 | date: 2024-08-30 4 | tag: Faith 5 | description: Freedom the way the world sees it isn't freedom - it's slavery. 6 | image: media/deann-dasilva-0jIg_-j_tTc-unsplash.jpg 7 | imageAlt: Photo by Deann DaSilva on Unsplash 8 | lastModified: 2024-08-30 9 | signature: true 10 | type: Post 11 | --- 12 | 13 | Freedom isn't freedom if you're enslaved to your flesh. 14 | 15 | If your entire life is realised by decisions that gratify your base desires, are you really operating of your own thoughts and free will? No, you aren't. You are controlled by the desires of your flesh - that isn't freedom. That's slavery—slavery to sin. 16 | 17 | God has offered us the only way to be free from this slavery through the death and resurrection of Jesus Christ for the sins of the world. Although we do not deserve it, He has seen it fit to send His one and only son to bear the punishment for our crimes. 18 | 19 | Not only did we trample and poison His creation, but we also killed God's own son. The fact He does not just destroy us all will always remain a mystery to me. 20 | 21 | God has offered us a second chance - all you must do now is repent and believe in the saving work of Christ on the cross and you will be saved. 22 | 23 | Do you want to be free? 24 | -------------------------------------------------------------------------------- /_content/posts/how-to-have-a-secure-election.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: How to have a secure election 3 | date: 2024-10-31 4 | tag: Politics 5 | description: It's simple really. 6 | image: media/arnaud-jaegers-IBWJsMObnnU-unsplash.jpg 7 | imageAlt: Photo by Arnaud Jaegers on Unsplash 8 | signature: true 9 | type: Post 10 | --- 11 | 12 | 1\. Citizens must attend secure voting booths and present proof of citizenship to access premises. Early in-person voting should be available for up to 30 days in advance. 13 | 14 | 2\. A unique ballot with a unique ID/barcode is printed by a machine upon the citizens arrival. This updates a database country wide preventing the printing of another ballot for this citizen. 15 | 16 | 3\. Citizen fills out vote. Citizen signs ballot. Citizen submits ballot in ballot box. 17 | 18 | 4\. Ballot boxes are securely locked and transported in secure vans with armed guards to secure location. 19 | 20 | 5\. Ballots are tabulated by machine first, then tabulated by a human. 21 | 22 | 6\. Federal elections are organised, funded and setup by the federal government. No state has the right to interfere or modify any part of the process. 23 | 24 | 7\. Citizens from the local community are invited to witness tabulation and ensure validity. 25 | 26 | How can America, one of the richest countries in the world, be so backwards in this department? 27 | -------------------------------------------------------------------------------- /_content/posts/is-suicide-sinful.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Is suicide sinful? 3 | date: 2019-11-06 4 | tag: Faith 5 | description: The act of suicide is sin because it's subjecting our own will onto 6 | something that is strictly God's decision. 7 | image: media/nikko-macaspac-6SNbWyFwuhk-unsplash.jpg 8 | imageAlt: "Photo by nikko macaspac on Unsplash " 9 | lastModified: 2024-10-23 10 | signature: true 11 | type: Post 12 | --- 13 | 14 | # What does the Bible say? 15 | 16 | The act of suicide is sin, because it's taking something that is strictly under God's commandments (life and death) and subjecting it to our own will. It robs a person of the amazing gift of life given to them by God alone. 17 | 18 | > "For you created my inmost being; you knit me together in my mother’s womb." — Psalm 139:13 19 | 20 | More importantly the mental attitude and thought process of someone who commits suicide is certainly sinful. It is always based in a selfish thought process. 21 | 22 | This is considered sinful because it is the purest form of unbelief in the promises of God. The general thought process of a suicidal person recognises that they do not believe God can help them. They believe no one can help them and that they are past the point of no return. 23 | 24 | Does a true child of God show fruits of suicide? God certainly has mercies on those who can't make choices for themselves, but ultimately, those with a self-destructive behaviour or a debased mind as described in Romans 1:28 are ultimately choosing to service themselves over God. 25 | 26 | Note that no one has ever hated his own flesh[^1], such behaviour reveals that those who are suicidal have no faith in Christ. God has made Himself clear that the unrighteous will not inherit the kingdom of God[^2], and that the unbelieving go to the lake of fire[^3]. 27 | 28 | # Biblical precedent 29 | 30 | Suicide is only mentioned in the Bible six times. In the case of Abimelech[^4], Samson[^5], Saul[^6], Ahithophel[^7], Zimri[^8], and Judas Iscariot[^9]. Each of these examples can be individually assessed and investigated as to how they speak about suicide through the eyes of the Father. 31 | 32 | Works performed outside of God are sin. If you believe this to be true, the deaths depicted in these texts can be quickly and easily explained as sinful, or as righteous (as we see in Samson's example, it's more the case of a noble sacrifice over suicide). 33 | 34 | # Nuance is required 35 | 36 | Please note that by writing this I am not saying that all people who commit suicide aren't saved. God is ultimately the judge and He will judge each person accordingly. 37 | 38 | [^1]: Mark 5:2-5, Ephesians 5:29 39 | 40 | [^2]: 1 Corinthians 6:9-10 41 | 42 | [^3]: Revelation 21:8 43 | 44 | [^4]: Judges 9:50-57 45 | 46 | [^5]: Judges 16:28-30 47 | 48 | [^6]: 1 Samuel 31:1-6; 2 Samuel 1:1-15; 1 Chronicles 10:1-13 49 | 50 | [^7]: 2 Samuel 17:23 51 | 52 | [^8]: 1 Kings 16:18-19 53 | 54 | [^9]: Matthew 27:5; Acts 1:18-20 55 | -------------------------------------------------------------------------------- /_content/posts/jesus-is-alive.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Jesus is alive 3 | date: 2025-05-19 4 | tag: Faith 5 | description: Jesus isn't dead and buried. He is risen. 6 | image: media/tomb.avif 7 | imageAlt: Photo by Pisit Heng on Unsplash 8 | lastModified: 2024-10-14 9 | signature: true 10 | type: Post 11 | --- 12 | 13 | Jesus isn't dead and buried.[^1] 14 | 15 | He is risen.[^2] 16 | 17 | He is alive.[^3] 18 | 19 | He is interceding for us at the right hand of the Father.[^4] 20 | 21 | Oh, how great a truth! How foolish we are to doubt.[^5] 22 | 23 | [^1]: Luke 24:3 24 | 25 | [^2]: Matthew 28:6 26 | 27 | [^3]: Mark 16:14 28 | 29 | [^4]: Hebrews 7:25 30 | 31 | [^5]: James 1:6 32 | -------------------------------------------------------------------------------- /_content/posts/monitor-windows-with-grafana-and-prometheus.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Monitor Windows with Grafana and Prometheus 3 | date: 2021-08-03 4 | tag: Technical 5 | description: Monitor your computers performance with Grafana and Prometheus. 6 | signature: true 7 | type: Post 8 | --- 9 | 10 | This article covers the installation and configuration process of OhmGraphite to work with Prometheus and send statistics to Grafana. 11 | 12 | ### Prerequisites 13 | 14 | - Prometheus 15 | - Grafana 16 | - Windows 10/11 with Administrator Privileges 17 | 18 | NOTE: Administrator Privileges is required for installation. 19 | 20 | ### Getting Started 21 | 22 | Before we begin the installation of OhmGraphite, let's first create a directory for our files to live in. 23 | 24 | For this example, we will be storing OhmGraphite in the following directory: 25 | 26 | ``` 27 | C:\OhmGraphite\ 28 | ``` 29 | 30 | ### Downloading and Installing OhmGraphite 31 | 32 | We will be using OhmGraphite as our statistic exporter. Head on over to: [https://github.com/nickbabcock/OhmGraphite/releases/latest](https://github.com/nickbabcock/OhmGraphite/releases/latest) to grab the latest version. 33 | 34 | Once you have downloaded the Zip folder, extract it and place the contents in the folder we created earlier. 35 | 36 | Now let's edit the OhmGraphite.exe.config file to set it up to work with Prometheus. 37 | 38 | Replace the contents of the file with the following code: 39 | 40 | ``` 41 | 42 | 43 | 44 | 45 | 46 | 47 | 50 | 51 | 52 | 53 | ``` 54 | 55 | Save and close the file. 56 | 57 | NOTE: You can edit this file at any time, but you will need to restart the application for the changes to make effect. 58 | 59 | Open a Powershell window in Administrator mode and enter the following command: 60 | 61 | ``` 62 | C:\OhmGraphite\OhmGraphite.exe run 63 | ``` 64 | 65 | Next, run the following command to install OhmGraphite as service that starts on boot: 66 | 67 | ``` 68 | C:\OhmGraphite\OhmGraphite.exe install 69 | ``` 70 | 71 | After installation, run the following command to start OhmGraphite: 72 | 73 | ``` 74 | C:\OhmGraphite\OhmGraphite.exe start 75 | ``` 76 | 77 | OhmGraphite has been successfully setup and is ready to go! Now let's configure Prometheus. 78 | 79 | ### Setup Prometheus to look for OhmGraphite 80 | 81 | In your Prometheus configuration file, add an additional job to the stack: 82 | 83 | ``` 84 | global: 85 | scrape_interval: 15s 86 | scrape_configs: 87 | - job_name: 'ohmgraphite' 88 | static_configs: 89 | - targets: ['10.0.0.200:4445'] 90 | ``` 91 | 92 | Once this has been added, restart Prometheus. OhmGraphite will now be picked up by Prometheus and be ready to serve to Grafana. 93 | 94 | ### Grafana Dashboard 95 | 96 | In your Grafana installation, import a new dashboard with the following code 11587. 97 | 98 | This dashboard is pre-configured to look for OhmGraphite export by Prometheus. 99 | 100 | The graphs should auto-populate with statistics as they roll in. 101 | 102 | ### Conclusion 103 | 104 | If you have any questions or think I could have taken a better approach, let me know! Feel free to reach out in the comments below or reach out to me via email. 105 | -------------------------------------------------------------------------------- /_content/posts/react-based-age-calculator.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: React based Birthday Age Calculator 3 | date: 2023-01-02 4 | tag: Technical 5 | description: Calculate age from a birthdate. 6 | signature: true 7 | type: Post 8 | --- 9 | 10 | In this short guide we'll be creating a simple React component that calculates and displays a person's age based on their birthday. 11 | 12 | Here's the code for the component: 13 | 14 | ```js 15 | export default function Age() { 16 | const birthday = new Date(1999, 8, 25); // September 25, 1999 17 | const currentDate = new Date(); 18 | let age = currentDate.getFullYear() - birthday.getFullYear(); 19 | 20 | // If the current date is before the birthday, subtract 1 from the age 21 | if ( 22 | currentDate.getMonth() < birthday.getMonth() || 23 | (currentDate.getMonth() === birthday.getMonth() && 24 | currentDate.getDate() < birthday.getDate()) 25 | ) { 26 | age--; 27 | } 28 | 29 | return {age}; 30 | } 31 | ``` 32 | 33 | First, we create a new function called Age using the export default syntax, which makes the function available for import in other parts of our application. Inside the function, we create two Date objects: birthday and currentDate. birthday is set to September 25, 1999 (my actual birthday!) and currentDate is set to the current date. 34 | 35 | Next, we create a variable called age and set it equal to the difference between the current year and the year of the person's birthday. This will give us the age in years. 36 | 37 | However, this calculation is not entirely accurate because it doesn't take into account the month and day. For example, if the current date is January 1 and the person's birthday is on December 31, they have not yet had their birthday this year and are technically one year younger. 38 | 39 | To fix this, we use an if statement to check if the current month and day are before the person's birthday. If it is, we subtract 1 from their age. 40 | 41 | Finally, we use a span element to wrap the age and return it to be rendered on the page. 42 | 43 | And that's it! With just a few lines of code, we've created a simple and effective NextJS and TypeScript component that calculates and displays a person's age. 44 | -------------------------------------------------------------------------------- /_content/posts/resize-a-proxmox-virtual-machine.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Resize a Proxmox Virtual Machine 3 | date: 2023-03-19 4 | tag: Technical 5 | description: Short guide on resizing a virtual machine. 6 | signature: true 7 | type: Post 8 | --- 9 | 10 | To increase the size of a hard disk, first power off the virtual machine, go to the Hardware tab, select the desired hard disk. Then, select Resize from the Disk Action drop-down menu, input the desired size increment, and select Resize disk. 11 | 12 | After resize has completed, start up your virtual machine and login. 13 | 14 | Confirm the relevant disk has increased in size. 15 | 16 | ```bash 17 | $ lsblk 18 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 19 | sda 8:0 0 1T 0 disk 20 | ├─sda1 8:1 0 1M 0 part 21 | ├─sda2 8:2 0 1G 0 part /boot 22 | └─sda3 8:3 0 1T 0 part 23 | └─ubuntu--vg-ubuntu--lv 253:0 0 31G 0 lvm / 24 | ``` 25 | 26 | Resize the partition with parted. 27 | 28 | ```bash 29 | $ sudo parted 30 | GNU Parted 3.3 31 | Using /dev/sda 32 | Welcome to GNU Parted! Type 'help' to view a list of commands. 33 | (parted) resizepart 3 100% 34 | (parted) quit 35 | Information: You may need to update /etc/fstab. 36 | ``` 37 | 38 | Extend the logical volume. 39 | 40 | ```bash 41 | $ sudo lvextend -r -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv 42 | Size of logical volume ubuntu-vg/ubuntu-lv changed from <31.00 GiB (7935 extents) to 1.03 TiB (270079 extents). 43 | Logical volume ubuntu-vg/ubuntu-lv successfully resized. 44 | resize2fs 1.45.5 (07-Jan-2020) 45 | Filesystem at /dev/mapper/ubuntu--vg-ubuntu--lv is mounted on /; on-line resizing required 46 | old_desc_blocks = 4, new_desc_blocks = 132 47 | The filesystem on /dev/mapper/ubuntu--vg-ubuntu--lv is now 276560896 (4k) blocks long. 48 | ``` 49 | 50 | Confirm resize is complete. 51 | 52 | ```bash 53 | $ lsblk 54 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT 55 | sda 8:0 0 1T 0 disk 56 | ├─sda1 8:1 0 1M 0 part 57 | ├─sda2 8:2 0 1G 0 part /boot 58 | └─sda3 8:3 0 1T 0 part 59 | └─ubuntu--vg-ubuntu--lv 253:0 0 1T 0 lvm / 60 | ``` 61 | 62 | 🎉 63 | -------------------------------------------------------------------------------- /_content/posts/the-doctrines-of-grace.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Doctrines of Grace 3 | date: 2019-09-06 4 | tag: Faith 5 | description: An overview of the doctrines of grace, what they are and what they 6 | mean for humanity. 7 | image: media/ioann-mark-kuznietsov-USS2u1-98io-unsplash.jpg 8 | imageAlt: Photo by Ioann-Mark Kuznietsov on Unsplash 9 | lastModified: 2024-10-14 10 | signature: true 11 | type: Post 12 | --- 13 | 14 | # Predestination/Unconditional Election 15 | 16 | Romans 8:29-30 tells us, “For those God foreknew he also predestined to be conformed to the likeness of his Son, that he might be the firstborn among many brothers. And those he predestined, he also called; those he called, he also justified; those he justified, he also glorified.” Ephesians 1:5 and 11 declare, “He predestined us to be adopted as his sons through Jesus Christ, in accordance with his pleasure and will…In him we were also chosen, having been predestined according to the plan of him who works out everything in conformity with the purpose of his will.” 17 | 18 | The words translated “predestined” in the Scriptures referenced above are from the Greek word proorizo, which carries the meaning of “determining beforehand,” “ordaining,” “deciding ahead of time.” So, predestination is God determining certain things to occur ahead of time. What did God determine ahead of time? According to Romans 8:29-30, God predetermined that certain individuals would be conformed to the likeness of His Son, be called, justified, and glorified. Essentially, God predetermines that certain individuals will be saved. Numerous scriptures refer to believers in Christ being chosen (Matthew 24:22, 31; Mark 13:20, 27; Romans 8:33, 9:11, 11:5-7, 28; Ephesians 1:11; Colossians 3:12; 1 Thessalonians 1:4; 1 Timothy 5:21; 2 Timothy 2:10; Titus 1:1; 1 Peter 1:1-2, 2:9; 2 Peter 1:10). 19 | 20 | # Total Depravity 21 | 22 | As a result of Adam’s fall, the entire human race is affected; all of Adam’s descendants are spiritually dead in their trespasses and sins (Ephesians 2:1, 5). Calvinists are quick to point out that this does not mean that all people are as bad as they could be. Rather, this doctrine says that, as a result of man’s fall in Adam, all people are radically depraved from the inside and that their depravity affects every area of their lives. 23 | 24 | # Limited Atonement 25 | 26 | The purpose of Christ’s atoning death was not to merely make men savable and thus leaving the salvation of humanity contingent on man’s response to God’s grace. Rather, the purpose of the atonement was to secure the redemption of a particular people (Ephesians 1:4–6; John 17:9). All whom God has elected and Christ died for will be saved (John 6:37–40, 44). Many Reformed Christians prefer the term “particular redemption” as they feel that this phrase more accurately captures the essence of this doctrine. It is not so much that Christ’s atonement is limited as it is particular, intended for a specific people—God’s elect. 27 | 28 | # Irresistible Grace 29 | 30 | God has elected a particular people to be the recipients of Christ’s atoning work. These people are drawn to Christ by a grace that is irresistible. When God calls, man responds (John 6:37, 44; 10:16). This teaching does not mean that God saves men against their will. Rather, God changes the heart of the rebellious unbeliever so that he now desires to repent and be saved. God’s elect will be drawn to Him, and that grace that draws them is, in fact, irresistible. God replaces the unbeliever’s heart of stone with a heart of flesh (Ezekiel 36:26). In Reformed theology, regeneration precedes faith. 31 | 32 | # Perseverance of the Saints 33 | 34 | The particular people God has elected and drawn to Himself through the Holy Spirit will persevere in faith. None of those whom God has elected will be lost; they are eternally secure in Him (John 10:27–29; Romans 8:29–30; Ephesians 1:3–14). Some Reformed theologians prefer to use the term “Preservation of the Saints” as they believe that this choice of words more accurately describes how God is directly responsible for the preservation of His elect. It is clear in Scripture that Christ continues to intercede for His people (Romans 8:34; Hebrews 7:25). This continues to provide believers with the assurance that those that belong to Christ are eternally His. 35 | -------------------------------------------------------------------------------- /_content/posts/the-propitiation-of-jesus-is-not-paganism.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Propitiation of Jesus is not Paganism 3 | date: 2024-10-23 4 | tag: Faith 5 | description: The pagan religions of old believed that they must pacify or 6 | appease their gods through sacrifice because of their unpredictable nature. 7 | image: media/hugues-de-buyer-mimeure--wT0iS-TSZM-unsplash(1).jpg 8 | imageAlt: Photo by Hugues de Buyer-Mimeure on Unsplash 9 | lastModified: 2024-10-24 10 | signature: true 11 | type: Post 12 | --- 13 | 14 | # Introduction 15 | 16 | 20 | The pagan religions of old believed that they must pacify or appease their 21 | gods through sacrifice because of their unpredictable nature. This practice is 22 | known as propitiation, the appeasement or satisfaction of someone or 23 | something. 24 | 25 | 26 | 31 | 32 | Many see the similarities between the faith of the pagans and that of the Christian in that they both try to appease their god (our God) by offering various gifts and sacrifices. 33 | 34 | # What sets the Christian faith apart? 35 | 36 | What sets the Christian faith apart, is that there is no sacrifice or method of appeasement that any man could bring that would pay for the eternal punishment demanded by God to reconcile even but one man to Himself.[^1] Once sin had entered the world through Adam and Eve, there was no way to fix what had been done except through an infinite and eternal sacrifice.[^2] 37 | 38 | For this reason, God was the only one who could reconcile man to Himself. Therefore, he sent Jesus, His one and only Son,[^3] fully man and fully God,[^4] born of a virgin,[^5] to become the perfect propitiation for our sins.[^6] All of God's just and righteous wrath was poured out on Jesus at the cross therefore creating a way for all those who call on Him to be reconciled with God.[^7] 39 | 40 | > _“Till on that cross as Jesus died, the wrath of God was satisfied”_ — In Christ Alone Hymn 41 | 42 | 46 | By drinking the cup of wrath,[^8] Jesus took the wrath of God onto Himself. 47 | The propitiation of Jesus, His taking on the satisfaction of God's wrath in 48 | our stead is the fundamental Gospel message. 49 | 50 | 51 | # Pagan unpredictability, willingness and cost. 52 | 53 | Paganism is also differentiated in that the pagan gods are unpredictable. On the other hand, God revealed the law to us, and made His hatred of sin clear.[^9] In paganism, humans must be the arbitrators of the sacrifice, at their own cost, to appease the gods. Our God _was_ the sacrifice incurring no cost to us.[^10] Pagan sacrifices, be that animal or human, are unwilling, or ignorant of their sacrifice. Jesus came to earth willingly, fully aware of the pain and cost to come. He laid his life down willingly in agreement with the Father’s good will.[^11] 54 | 55 | 56 | God abhors human sacrifice[^12] and has only accepted one human sacrifice in 57 | all of history, that being Jesus, because he was fully worthy, and fully 58 | willing to lay down his life for ours so that we would could have communion 59 | with the Father. 60 | 61 | 62 | [^1]: Romans 6:23 63 | 64 | [^2]: Romans 5:1-21 65 | 66 | [^3]: John 3:16 67 | 68 | [^4]: John 1:14 69 | 70 | [^5]: Matthew 1:23, Luke 1:27 & 34 71 | 72 | [^6]: Hebrews 2:17 73 | 74 | [^7]: 1 John 4:10 75 | 76 | [^8]: Luke 22:42-44, Psalms 75:8, Revelation 14:10 77 | 78 | [^9]: Romans 7:7-25 79 | 80 | [^10]: Hebrews 10:5-7 81 | 82 | [^11]: John 10:17-18 83 | 84 | [^12]: Deuteronomy 12:31 85 | -------------------------------------------------------------------------------- /_content/posts/the-vine-and-the-branch.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: The Vine and the Branch 3 | date: 2021-03-19 4 | tag: Faith 5 | description: A short study on John 15:4. 6 | image: media/sixteen-miles-out-L-mNqn89I2s-unsplash.jpg 7 | imageAlt: "Photo by Sixteen Miles Out on Unsplash " 8 | signature: true 9 | type: Post 10 | --- 11 | 12 | > Remain in me, and I will remain in you. For a branch cannot produce fruit if it is severed from the vine, and you cannot be fruitful unless you remain in me. 13 | 14 | — John 15:4 15 | 16 | Jesus is speaking to his disciples as He prepares them for His sacrifice and departure. The verse applies to those who already apart of Christ's family. The verse is a promise that so long that we maintain a union with Christ, we will bear fruit. 17 | 18 | The example Jesus provides is that God is the vine, and we are the branches. We, as gentiles, are grafted onto this vine upon the acceptance of Christ. We must abide in Christ, as a branch on a vine, which is supported by it, grows in it and eventually becomes fruitful. Breaking away from the vine can spell certain disaster - our safety depends on being grafted to that vine. To sustain genuine spiritual life in the world, we must remain intimately connected to Christ - like the branch. 19 | 20 | If we do not produce fruit, we are cut-off from God and handed over to our own sinful desires. 21 | 22 | > Anyone who does not remain in me is thrown away like a useless branch and withers. Such branches are gathered into a pile to be burned. But if you remain in me and my words remain in you, you may ask for anything you want, and it will be granted! When you produce much fruit, you are my true disciples. This brings great glory to my Father. 23 | 24 | — John 15:6-8 25 | 26 | In the verse, Jesus is speaking this over His disciples to prepare them for the time ahead. Jesus wants them to abide _in_ Him, not with Him. _In Him._ The command is not abide with Me, near me or under Me, but _In Him._ And He wants us to do the same. 27 | 28 | The fruit-bearing branch is not only connected to the vine, near it, or under its shadow, it is within the vine and it abides inside of it. 29 | 30 | Although Jesus did not go into detail about how He will abide in us, our faithful residence and abidance, will lead to His feelings becoming our own feelings, we will think as He thinks, will as He wills and choose as He chooses. His righteousness will be come our righteousness, His strength our strength. He commands us to come out of ourselves and our own way of thinking, to step into Himself and His way of being. 31 | 32 | Christ abides in us, by shaping us into an instrument of His word, understood and believed under His influence where we think, feel, enjoy and choose along with Him. 33 | 34 | Christ has formed within us that it is not so much they who live, but Christ who lives within them. 35 | 36 | > Those who obey God’s commandments remain in fellowship with him, and he with them. And we know he lives in us because the Spirit he gave us lives in us. 37 | 38 | — 1 John 3:24 39 | 40 | It is our faith that will unite us to our saviour and it is our continued faith which keeps us grafted to the True Vine. 41 | 42 | He wants us to have a conscious union with Him on the deepest level. We must come to the realization that we can do nothing - we are dead branches without Him. We too often try to live as our own vine and act as though by our own power, we were to do God's will. 43 | 44 | We have failed tremendously and yet Christ still invites us to humble ourselves and be redeemed as a branch. 45 | 46 | We must surrender ourselves to Christ for His purposes, as the branch exists for the vine. But, in the same breath, the fullness of Christ is ours also. 47 | 48 | Why does Jesus use 'vine' instead of 'tree'? And why does the Gospel of John refer to Jesus as the 'True Vine'? 49 | 50 | The grapevine and the vineyard traditionally represented God's people, planted and tended by him in Israel (Psalms 80:8-18; Isaiah 5:1-7; Jeremiah 2:21; 12:10-11; Ezekiel 15:1-5; Hosea 10:1-2). When Jesus used this image, He made an important departure: He declared that He is the true grapevine and that a relationship with God requires attachment to Him. This in turn infuriated the church leaders of the time and is the reason why the Gospel of John refers to Jesus as the True Vine so as to differentiate Him from God's people. 51 | 52 | If you have any questions or think I could have taken a better approach, let me know! Feel free to reach out in the comments below or reach out to me via email. 53 | -------------------------------------------------------------------------------- /_content/posts/thoughts-on-bojack-horseman.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Thoughts on BoJack Horseman 3 | date: 2021-10-02 4 | tag: Art 5 | description: Although secular, Bojack Horseman was an interesting show that got 6 | me thinking a lot. 7 | image: media/bojack-horseman-2020-4k-g9-3840x2400.jpg 8 | signature: true 9 | type: Post 10 | --- 11 | 12 | BoJack Horseman is the kind of character you can laugh with, cry, hate and love all at the same time. The show BoJack Horseman delves into a multitude of complex human issues, exploring themes such as family dynamics, love, fleeting happiness, addiction, nihilism, abuse, mortality, mental health, and the pursuit of legacy. 13 | 14 | The creators of the show demonstrate a deep affection for their characters. Writer Raphael Bob-Waksberg crafts unique character arcs that both inspire and challenge audiences. The depth and relatability of the side characters' lives ground the show in reality, even in moments like the interaction between BoJack and Eddie the dragonfly in S4 E2, where their desire for connection is palpable but are unable to make that final connection. 15 | 16 | The overarching theme of the show revolves around the struggle for happiness amidst life's cruelties and unmet expectations. BoJack copes by immersing himself in vices, seeking distractions from his inner turmoil, often leading to destructive behavior that affects his relationships. We saw that with Wanda, and frankly, most of his relationships. 17 | 18 | We see a similar trend with all of the characters in the show of success and failure and never being quite satisfied with either. It wasn't until they began to take responsibility for their actions that they truly started to come to terms with their meaningless lives. 19 | 20 | BoJack Horseman offers a diverse range of narratives, with BoJack's relatability resonating with many viewers. The show prompts introspection, making audiences reflect on their own choices and experiences. While personally captivating, the emotional journey it leads viewers on is intense, akin to a mirror reflecting one's thoughts and desires with unfiltered honesty. 21 | 22 | An emotional roller-coaster. 23 | 24 | Diane's closing words perfectly encapsulates the ebbs and flows of relationships and their profound impact on our lives. It's a reminder that even amidst the chaos, there is always a glimmer of hope, a chance for growth and redemption. 25 | 26 | > There are people that help you become the person you end up being, and you can be grateful for them, even if they were never meant to be in your life forever. 27 | 28 | Even though these are just animated anthropomorphic animal characters in a loosely realistic world, it doesn't change what the creators of this show wanted to convey. The scenarios portrayed in BoJack Horseman are exceptionally down to earth, so much so that we simply can't help but see ourselves in them at every turn. 29 | -------------------------------------------------------------------------------- /_content/posts/we-should-care-more-about-learning-how-to-think-versus-cramming-information.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: We should care more about learning how to think versus cramming information 3 | date: 2024-07-29 4 | tag: Education 5 | description: Cramming information is useful if you want to look smart, but 6 | thinking and approaching problems the right way is an attribute few possess. 7 | image: media/pinky-and-the-brain.jpg 8 | lastModified: 2024-07-29 9 | signature: true 10 | type: Post 11 | --- 12 | 13 | Cramming information is useful if you want to look smart, but thinking and approaching problems the right way is an attribute few possess. 14 | 15 | Institutions would do well to teach their students how to think and approach problems with critical thought over throwing buckets of information at them. Being able to critical assess a problem, see an argument from both sides, rationalise their worldview and accept when their wrong will prepare a student for lifelong success. 16 | 17 | Not only will this create well rounded non-emotionally driven individuals (just par the course), it will also create opportunities and incredible student outcomes. Only critical thinkers or "smart" people lead businesses, go into politics and make the world a better place, well, that's how it should be unless you're a DEI hire or bark the right tune... 18 | -------------------------------------------------------------------------------- /_content/posts/what-is-common-grace.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: What is Common Grace? 3 | date: 2020-04-26 4 | tag: Faith 5 | description: Common Grace pertains to the sovereign grace of God bestowed upon 6 | all of mankind regardless of their election. 7 | image: media/artem-sapegin-8c6eS43iq1o-unsplash.jpg 8 | imageAlt: "Photo by Artem Sapegin on Unsplash " 9 | lastModified: 2024-10-14 10 | signature: true 11 | type: Post 12 | --- 13 | 14 | Common Grace is a theological concept in Protestant Christianity hashed out in the late 19th and early 20th Century by Reformed Christians of the time. It pertains to the sovereign grace of God bestowed upon all of mankind regardless of their election. Effectively, this means that God has always bestowed His graciousness on all people in all parts of the world throughout all of history. 15 | 16 | The Three Points of Common Grace were formulated in 1924 when the Christian Reformed Church adopted the doctrine at the Synod of Kalamazoo. 17 | 18 | # The First Point: 19 | 20 | The first point refers to the favourable attitude of God toward all His creatures, not only toward the elect. "The Lord is good to all; he has compassion on all he has made" (Psalm 145:9). 21 | 22 | Jesus said God causes “his sun to rise on the evil and the good, and sends rain on the righteous and the unrighteous” (Matthew 5:45) and God “is kind to the ungrateful and wicked” (Luke 6:35). 23 | 24 | # The Second Point: 25 | 26 | The second point pertains to the restraint of sin in the life of an individual or society. Scriptures record many accounts of God directly intervening and restraining individuals from sinning. For example, in Genesis 20, God restrained Abimelech from touching Sarah, Abraham's wife. God appeared to Abimelech in a dream to affirm what had happened as described in Genesis 20:6. 27 | 28 | Another clear example of God restraining the wicked hearts of evil men is seen in God's protection of the land of Israel and it's people from being invaded and killed by pagan nations on their border. God commanded the men of Israel that three times a year they would leave their plot of land to go and appear before Him (Exodus 34:23). To ensure the protection of God’s people from invasion during these times, even though the pagan nations surrounding them desired their land year-round, God promised that “no one will covet your land when you go up three times each year to appear before the Lord your God” (Exodus 34:24). 29 | 30 | Not only does the second point of Common Grace include God's restraining of evil, but also when he sovereignly releases it for His purposes. Scripture recounts the hardening of individuals hearts many times, (Exodus 4:21; Joshua 11:20; Isaiah 63:17), He does so by releasing His restraint on their hearts, thereby giving them over to the sin that resides there. 31 | 32 | In Romans 1, Paul describes those who suppress the truth by their wickedness and how they ultimately fell before the Lord. God “gave them over in the sinful desires of their hearts to sexual impurity for the degrading of their bodies with one another” (Romans 1:28). 33 | 34 | # The Third Point: 35 | 36 | Those of mankind who do not have renewed hearts, will still be influenced by God's nature so that even they will perform good deeds toward his fellow man. 37 | 38 | As Paul said of a group of unregenerate Gentiles, they “do by nature things required by the law, they are a law for themselves, even though they do not have the law” (Romans 2:14). The necessity of God restraining the hearts of the non-believer becomes clear when we understand the biblical doctrine of total depravity. 39 | 40 | If God did not restrain the evil that resides in the hearts of all men, hearts which are “deceitful and desperately wicked” (Jeremiah 17:9), humanity would have destroyed itself centuries ago. But because He works through common grace given to all men, God’s sovereign plan for history is not thwarted by their evil hearts. In the doctrine of common grace, we see God’s purposes stand, His people blessed, and His glory magnified. 41 | -------------------------------------------------------------------------------- /_content/posts/work-life-balance.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Work-life balance complaints are overblown 3 | date: 2025-03-11 4 | type: Post 5 | lastModified: 2025-03-11 6 | signature: true 7 | tag: Politics 8 | description: Reflecting on work-life balance and arguing against common complaints. 9 | --- 10 | 11 | On X recently, I saw a post complaining about the modern work-life balance. 12 | 13 | https://x.com/Jxxtlucky/status/1898726460770435209 14 | 15 | Reflecting on it for a moment, I started thinking about all of the free time I would have if I didn't keep myself busy with the projects I'm working on. 16 | 17 | After some thought, I came to this conclusion: 18 | 19 | There are 168 hours total in a week, 56 hours for sleep (8 per night), 55 hours for work (7am - 6pm, allowing time for commute) 20 | 21 | 168-111 = 57 hours to browse TikTok (kidding of course). 22 | 23 | Wake up at 7. Commute to work. Work from 9-5. Get home at 5:30, cook dinner/eat. Then, from 6pm build/do something for 5 hours. That's 25 hours of work possible during the week with the remainder split across the weekends. 24 | 25 | Seems pretty balanced to me! Sure, it could be better - less travel time, better economic buying power for time spent etc. 26 | 27 | But really, we live in some of the best working conditions in all of human history. We really only have minor complaints. 28 | 29 | Let's use all the hours that God has granted us to their maximum potential! 30 | -------------------------------------------------------------------------------- /_content/videos/amarus-revenge.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Amaru's Revenge 3 | date: 2023-06-18 4 | tag: R6S 5 | description: 6 | videoUrl: OClHNSgCUAPLxvHI9SFmyjoxnquNeg2yP00NanaNOMR8 7 | duration: 43 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/ballo-moments.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Ballo Moments 💪 3 | date: 2022-11-11 4 | tag: CS 5 | description: 6 | videoUrl: q01IDRnC1F200W2Y1yhfbwzB008eRqdW3y39YCk01PmP4XE 7 | duration: 69 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/balls-of-steel.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: BALLS OF STEEL 3 | date: 2023-02-05 4 | tag: ARMA 5 | description: 6 | videoUrl: QvVLstup7qhoe3fXW00OAFT4MITcFMtV01KAvlKmUp00jI 7 | duration: 69 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/best-zsu-driver-confirmed.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: BEST ZSU DRIVER CONFIRMED 3 | date: 2023-08-22 4 | tag: ARMA 5 | description: 6 | videoUrl: ML82TnnHtRBHIPmqh8dwFs7puq9Zoptrfb2l56qsgLI 7 | duration: 72 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/bigger-and-better-memes.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bigger and better memes 3 | date: 2022-09-15 4 | tag: ARMA 5 | description: 6 | videoUrl: wyJuPxu4bdMoL5Db8T01xct02ITPK5ELxtHFkGlh02PIvA 7 | duration: 430 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/birb.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Birb ✈️ 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: 5xbaVvYj02wIEuJco00NpPabXui009Ct8XO8lBEXaXtaZw 7 | duration: 24 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/breach-and-clear.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Breach and Clear 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: XKHaUeWhLNKgPFPKsUOkBARMPuMG5t01gBx4pouMoK94 7 | duration: 42 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/bridge-explosion.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Bridge Explosion 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: dqwnqkP01gDrvvYzJ71cmrpHVUG1f2R56cNDrEDu6NSw 7 | duration: 17 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/brr-brr.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: brr brr 3 | date: 2023-05-28 4 | tag: ARMA 5 | description: 6 | videoUrl: RBkvJmbSIigIVUV8YPWz19KYcx1pNyg6eJ6FtTCQgK8 7 | duration: 28 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/chad-spg.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Chad SPG 3 | date: 2023-08-07 4 | tag: ARMA 5 | description: 6 | videoUrl: cqnSGEoH00MF1OZroz0200wh8xwbhHuPwDuKubzO5by01Ew 7 | duration: 228 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/chain-gunner-attachment.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Chain Gunner Attachment 3 | date: 2023-02-21 4 | tag: ARMA 5 | description: 6 | videoUrl: kUGDwuDQax8jGCJE6zRqBcWUKAmVHpCkM3Bb1upqV400 7 | duration: 41 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/charge.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Charge! 3 | date: 2023-02-21 4 | tag: ARMA 5 | description: 6 | videoUrl: SDaolytpG6QZRl00g8mUwX4rzbu1tJWFFEg8am9OUcI8 7 | duration: 37 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/cheeky-roleplay.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cheeky roleplay 3 | date: 2023-03-14 4 | tag: ARMA 5 | description: 6 | videoUrl: 7jopx6EM02QSc9LqdWCXTMyfh39rvVFbC023AhoieZTd00 7 | duration: 227 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/cherries-and-berries.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cherries and berries! ⚠ 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: ll5wWfyBk95A00blYB2o8vHPm2YW01uA7EgjR6XhIZmo00 7 | duration: 31 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/chinchilla-melon-festival.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Chinchilla Melon Festival 3 | date: 2023-03-05 4 | tag: Life 5 | description: 6 | videoUrl: 7lB7zzgdFiG01GmlYSEhIqPQHYW2upBq7J3zoa78f6EQ 7 | duration: 8 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/counting.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Counting? 3 | date: 2023-04-23 4 | tag: ARMA 5 | description: 6 | videoUrl: U1fk4KZavF7FPimZxEfFf5Zb4GJsGJJp89TQZiYc2rQ 7 | duration: 56 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/dayum-boi.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Dayum boi! 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: qhFl1zmifzhUCD1nMkeCOfJTCZyj67acnR9GVyQ3w2Y 7 | duration: 31 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/f-for-vulkan-and-sodel.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: F for Vulkan and Sodel 3 | date: 2022-11-13 4 | tag: ARMA 5 | description: 6 | videoUrl: hao2qA02XoU1GU3h7u1Pj2ErVvE9drWx02P1DDHsEUPww 7 | duration: 437 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/freeballing-it.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: FREEBALLIN' IT! 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: NACDkxdjM5HZZpovIYJHIhhVbXbo9ie3V01KXI02jJrLg 7 | duration: 31 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/get-rotated-idiot.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Get rotated idiot! 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: 68DeD5jaZ3AO52VJajkesK01afPChhsHY2msFfmZK6IM 7 | duration: 16 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/glitterbeards-cave.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Glitterbeard's Cave 3 | date: 2022-07-13 4 | tag: SOT 5 | description: 6 | videoUrl: 16mLGoj2uixoYcy5oeQ7vzwGPAQvc1sbVqvt01uHnjS8 7 | duration: 346 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/gun-go-brr.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Gun go brrr 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: n4sPliET01Oi1cRR64e02902xiveCCcwhqoxx6tiJWzQKk 7 | duration: 283 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/han-the-man.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Han the man 💪 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: WpwgltF5hnEehRtfzFWGxf1P9r7DnC8kNV6lfa00NLpM 7 | duration: 42 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/hardcore-parkour.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hardcore Parkour 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: xdbMDfBQ3aIKccGWmHdXlZQerLSGxbvW6DRcaxt2E00c 7 | duration: 15 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/hawaiian-has-rickets.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hawaiian has rickets 😭 3 | date: 2023-07-16 4 | tag: ARMA 5 | description: 6 | videoUrl: ii01bS6L6Y01E6tXtf012gxcdVhrmmXO3cX9C4cRbxzCPs 7 | duration: 541 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/hello-ive-arrived.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hello! I've arrived! 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: FW00sQd9Ql8xto386Ky01QAfT6Qjd62nnQZlywkNxS9nU 7 | duration: 23 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/hello-there.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Hello there! 👋 3 | date: 2022-11-12 4 | tag: CS 5 | description: 6 | videoUrl: F5Y01UgpT6ONkDrNaLlKiUhgMJDHD1KvtqAyhj7TmEio 7 | duration: 160 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/i-love-this-game-sometimes-hehe.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: I love this game sometimes hehe 3 | date: 2023-05-10 4 | tag: ARMA 5 | description: 6 | videoUrl: UVpThntGQR6sDK3YCFpfnWgYYwfR003emLGDJ1mIS021Q 7 | duration: 37 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/i-should-have-been-more-concerned.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: I should have been more concerned... 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: UViut01neIcKcMxodpCNYifJXdW32kL74utoJRgeI3X00 7 | duration: 47 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/i-spent-most-of-this-mission-dead.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: I spent most of this mission dead 💀 3 | date: 2022-11-06 4 | tag: ARMA 5 | description: 6 | videoUrl: 3Sdo6ci3QhwzuOe26kunc02Ee00H2DZmcrYE4fL1YCK2Y 7 | duration: 194 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/im-going-to-glass-this-place.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: I'm going to glass this place! 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: uWEIv48o51mCBa7576unp1Y00236SwhQt8HBKK1pm01IY 7 | duration: 5 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/infinite-bullets-glitch.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Infinite Bullets Glitch 3 | date: 2023-12-02 4 | tag: CS 5 | description: 6 | videoUrl: L2NszURWxdCqITUxpwmoNVru45ejUxwPV02glZfSSy00U 7 | duration: 37 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/instant-death.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Instant Death 3 | date: 2022-11-11 4 | tag: Wreckfest 5 | description: 6 | videoUrl: NcjgWSUoHsCZ9LpCV8sXAWyT3XvTisASqKQJBhjdOLY 7 | duration: 39 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/itkatsumore.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Itkasumore 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: 5ap01qR5eU1e01t5QAJJnE5Grp8KHqrX1yJJPY3rSJIww 7 | duration: 50 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/javwin.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Javwin 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: 01k4seQiLrrWFx02CcWT2D002uT02LUhIVnfxvzd8f3v6XA 7 | duration: 36 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/kapow.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Kapow! 3 | date: 1970-01-01 4 | tag: ARMA 5 | description: 6 | videoUrl: YyGunrda6iixCxo59cpH5tCJhBgvhjdKpy8N80231qmc 7 | duration: 23 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/leap-of-faith.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Kapow! 3 | date: 1970-01-01 4 | tag: ARMA 5 | description: 6 | videoUrl: YyGunrda6iixCxo59cpH5tCJhBgvhjdKpy8N80231qmc 7 | duration: 23 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/learn-to-drive.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Learn to drive! 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: jDFmqB2FHQ00aJ7YLYTTJfAwQ5cGFRcfgY5GR2YaUg18 7 | duration: 31 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/my-heart.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: My heart 3 | date: 2023-06-06 4 | tag: ARMA 5 | description: 6 | videoUrl: quYsHiPF3Sgzx3sUxwM00kdjCfpAffg6qmXsKLi6qgNk 7 | duration: 47 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/my-useless-10-10-drop.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: My useless 10-10 drop 🤣 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: uMUIc7h4eYacNhlOdC4BB0000ySvS6nCPNBjn8G8C499w 7 | duration: 31 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/never-jump-walls-in-an-enemy-ao.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Never jump walls in an enemy AO! 3 | date: 2022-11-22 4 | tag: ARMA 5 | description: 6 | videoUrl: E02PTmeH1SlG6dab2fKtY00Y6rVFQqzxwfEUWgzNb4bZQ 7 | duration: 46 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/off-to-war.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: OFF TO WAR 3 | date: 2023-02-26 4 | tag: ARMA 5 | description: 6 | videoUrl: UWC7IvzTHPe026QEnUOUA5YUOsQcQ3R54VdW6iFscBTo 7 | duration: 16 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/orenjis-boo-boo.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Orenji's Boo Boo 3 | date: 2023-05-08 4 | tag: ARMA 5 | description: 6 | videoUrl: i1yDH2gXacyWfj71AtDMs01hLZ00N7wJ8yTIN2X1J2lyk 7 | duration: 27 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/out-of-ammo-run-him-down.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: "out of ammo, run him down" 3 | date: 2024-05-14 4 | tag: ARMA 5 | description: 6 | videoUrl: T4CAduSidc02Qd6t3003bOyHOKbTrWbTO0201aHqrkXBJyM 7 | duration: 32 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/panzerfaust-time.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Panzerfaust Time 💥 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: NY00FnT02k3Wo9FOjFgCD00l3v2xNXg1Y5nUZN9VK0135uw 7 | duration: 169 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/patience-is-key.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Patience is key! 3 | date: 2022-11-12 4 | tag: CS 5 | description: 6 | videoUrl: Ptr3Jyv6W2aO7XOLc01DD9iwNd50127WpSHzqa00TbISNA 7 | duration: 179 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/pew-pew-pew.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Pew! Pew pew! 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: FeypBRnGZ6lGzU600KVU1aWgvQa02lrlu4X4F9tqIPpBI 7 | duration: 17 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/pistols-and-shotguns-are-cracked.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Pistols and Shotguns are CRACKED 3 | date: 2024-05-18 4 | tag: R6S 5 | description: 6 | videoUrl: qA7AxGh00uSjpUFj7Uk5aVgXK7pgTFGAeHO8Tcf8TYDA 7 | duration: 132 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/quick-flip.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Quick Flip! 3 | date: 2023-02-26 4 | tag: ARMA 5 | description: 6 | videoUrl: n400sseXb6l9OiLe95ZvE02FRevaO2zQYimayHXKh1FUk 7 | duration: 13 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/rampage.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Rampage 💀 3 | date: 1970-01-01 4 | tag: ARMA 5 | description: 6 | videoUrl: LAxVJrz2Xml5TUgixqG3w5wgtCjygW9GKIidMAoH61w 7 | duration: 227 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/raw-driving-skill.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Raw Driving Skill 3 | date: 2023-09-17 4 | tag: ARMA 5 | description: 6 | videoUrl: uwkBnnDi00TqxhDpyJG00cFaMfHZyaja00MPSvVd200sJaw 7 | duration: 117 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/schwacked.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Schwhacked 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: 01it01PGaNlGpVqdYj6YWCR3S3mShTRAtV2YZnB3w00ycM 7 | duration: 14 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/some-questionable-tactics.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Some Questionable Tactics... 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: X6AzP7J26g6mfRLD6yBlMRv5cE3gI4ahkqeUmhUOmUg 7 | duration: 23 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/spinbot-3000.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Spinbot 3000 🤖 3 | date: 2022-10-31 4 | tag: ARMA 5 | description: 6 | videoUrl: BArO00G8BBk4UcUHGb3joGQrqVBMVh16i0092DxizBERo 7 | duration: 112 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/tank-engagements.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Tank Engagements 3 | date: 2023-10-17 4 | tag: ARMA 5 | description: 6 | videoUrl: 6r3Um892RaufSNM6LlYZbdjjqKdqxeMmYEYgnDkSvnQ 7 | duration: 250 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/teamspeak-shenanigans.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: TeamSpeak Shenanigans 3 | date: 2023-06-06 13:03:53.402 4 | tag: ARMA 5 | description: 6 | videoUrl: WY253YwZYzrc00ZvwNOpkjIbZmuuAMkfNJHMf5VAP01Q00 7 | duration: 26 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/that-was-cracked.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: That was cracked! 3 | date: 1970-01-01 4 | tag: CS 5 | description: 6 | videoUrl: 93gifxfr2tT1LNNsJPgAVW02Tv0222IhvpSvldp02VhCOE 7 | duration: 28 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/they-see-me-rollin.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: They see me rollin' 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: h6023hrNRavqcCr02jhu5Agovg01evXY00LiP4js7HdNtfc 7 | duration: 21 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/theyre-what.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: They're what!? 3 | date: 1970-01-01 4 | tag: ARMA 5 | description: 6 | videoUrl: P00V3Hw9P8DNrYuAUp01d43vUz3Gqn8JedCfLZ02CoEqPc 7 | duration: 24 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/toaster-bath-is-a-good-driver.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Toaster Bath is a good driver! 3 | date: 2022-07-11 4 | tag: ARMA 5 | description: 6 | videoUrl: suRhinGJwEXafAh01Hp4buoqaleeQErhz6ruUFfmpY3c 7 | duration: 28 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/tt-german-rumble.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: TT - German Rumble 3 | date: 2023-05-19 4 | tag: ARMA 5 | description: 6 | videoUrl: 7lRjYo3T2M8urPQV4oIjMV1Grhhkfc5RgcBgDXXZouU 7 | duration: 50 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/vehicular-confusion.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Vehicular Confusion 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: vNiXKX02FwAPS29I02zP8R3hRzv00ua3S01NN1QLopuDDN8 7 | duration: 264 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/what-a-round.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: What a round 😯 3 | date: 2022-11-17 4 | tag: CS 5 | description: 6 | videoUrl: JoEg5Svt7IWkuH8fwH7tl8S3wcNw9QKaBqUsviQaQQs 7 | duration: 119 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/what-even-is-a-straight-line-anyway.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: What even is a straight line anyway? 3 | date: 2022-07-11 4 | tag: ARMA 5 | description: 6 | videoUrl: X696BYT41HaNeG5gVTUXIhFmcLisIwDNS6V6ZGDck0000 7 | duration: 9 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/what-plane-is-this.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: What plane is this? 🤔 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: GnYqOxTbKvw2r6o35P4fhwBPp102Rdkh4dxjVXXBo016U 7 | duration: 52 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/whats-a-grief-and-beef.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: What's a grief and beef? 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: 00TBAZ6emfP8DDmFZMPGODh5wP701lGv01Dz26PzPYKXAI 7 | duration: 23 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/wheres-my-boonie-hat.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Where's my boonie hat? 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: NNfQEH34801SPox7yVcmG6FyUXkFcnfdfe7l0073xysd8 7 | duration: 99 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/why-arent-they-shooting-him.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Why aren't they shooting him? 3 | date: 2022-11-11 4 | tag: ARMA 5 | description: 6 | videoUrl: RJYz8UiZIilw8guusHQZK701SAJt00zE01yRmbmUJXpE3Q 7 | duration: 76 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/you-wanna-see-some-magic.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: You wanna see some magic? 3 | date: 2022-07-13 4 | tag: ARMA 5 | description: 6 | videoUrl: CDVv747QDSw3guVKo201Rn00bTex01F1kPl6VNnUlbwLk00 7 | duration: 8 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zero-operational-awareness.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: Zero Operational Awareness 3 | date: 2022-11-12 4 | tag: ARMA 5 | description: 6 | videoUrl: crkZjNpM2jD4hLpRzdolLjkigyx94JWtXXF6006tNKF00 7 | duration: 58 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zoomin.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: zoomin' 3 | date: 2022-11-06 4 | tag: ARMA 5 | description: 6 | videoUrl: lSp6Rac8pugpOUb9rs01T7N0100vZ01p4RL877Jez8KBHBQ 7 | duration: 32 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-baited-traps.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - OPERATION BAITED TRAPS 3 | date: 2023-10-17 4 | tag: ARMA 5 | description: 6 | videoUrl: C72bMNBrEQdUBv9prcDA4M9pk6QDtE6xFq8Ww5ukAWY 7 | duration: 138 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-bay-of-goats.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - Operation Bay of Goats 3 | date: 2023-03-28 4 | tag: ARMA 5 | description: 6 | videoUrl: EApZnh02fN1ezC7vcUjqkK02ja4dh2BzjdD0202QQT2BFTM 7 | duration: 242 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-blitzkrieg.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - OPERATION BLITZKRIEG 3 | date: 2023-11-21 4 | tag: ARMA 5 | description: 6 | videoUrl: Bw00f8UKmc6woZmyJa01PU5QAU1NMmBdsiR90200yKFcOho 7 | duration: 117 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-bridge-baby.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - Operation Bridge Baby 3 | date: 2023-02-16 4 | tag: ARMA 5 | description: 6 | videoUrl: Zc4LSuXTTfmWPw00pZCkz8OAVt01DCe601PQs5qzJb5fq8 7 | duration: 199 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-burning-pine.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - Operation Burning Pine 3 | date: 2022-12-20 4 | tag: ARMA 5 | description: 6 | videoUrl: VaVcjQTiYWKwscwPlN4klvo2ZT98aDegq900C00dLVGz4 7 | duration: 169 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-derailed.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - OPERATION DERAILED 3 | date: 2023-11-14 4 | tag: ARMA 5 | description: 6 | videoUrl: vOEChCgeOmmU02b0102TNrxzkjQoaX1AsnAZLd00TuNOVe4 7 | duration: 87 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-genesis.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - Operation Genesis 3 | date: 2023-05-04 4 | tag: ARMA 5 | description: 6 | videoUrl: HHf93DYs102wZB01mlEVmJYo1XuVBoV01MmbwAazMaAT3I 7 | duration: 110 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-guiding-serpent.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - Operation Guiding Serpent 3 | date: 2023-03-21 4 | tag: ARMA 5 | description: 6 | videoUrl: lGe1Z3O8JQV1JvF015RjIOC2001gIo9j028BqAdn52yP5w 7 | duration: 146 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-krugertown.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - OPERATION KRUGERTOWN 3 | date: 2023-08-06 4 | tag: ARMA 5 | description: 6 | videoUrl: CSkKqSD01RKiY38ZFM2vhW2J00lym01s7eExiIuG01kIZ58 7 | duration: 192 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-mud-washer-pt-2.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - Operation Mud Washer PT. 2 3 | date: 2022-11-29 4 | tag: ARMA 5 | description: 6 | videoUrl: mSaFlXUIEFCqJB6q1wVOhwbujHn3wERfbcfJYhgIIDs 7 | duration: 522 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-outlast.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - OPERATION OUTLAST 3 | date: 2023-10-24 4 | tag: ARMA 5 | description: 6 | videoUrl: VuF9DPXmr4mDLcDjLO8JrFOZGagucPyHMbY7c7PK9Ak 7 | duration: 113 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-overblown.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - Operation Overblown 3 | date: 2022-11-12 4 | tag: ARMA 5 | description: 6 | videoUrl: bHYCW6bDUE8a011xxh8fc00YXu02gnlcXbkscaPl02EDhzg 7 | duration: 720 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-peoples-highway.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - Operation Peoples Highway 3 | date: 2023-04-04 4 | tag: ARMA 5 | description: 6 | videoUrl: gN901vV7sry101zHLoVby2wqK500X7Abbov2bcsTIoOTlc 7 | duration: 537 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-poached-eggs.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - Operation Poached Eggs 3 | date: 2023-02-05 4 | tag: ARMA 5 | description: 6 | videoUrl: qzvnp3z1zVjQb8Jne7dXgRaT8AFnrcEApPJgQlUkPWM 7 | duration: 225 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-serpent-slayer.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - Operation Serpent Slayer 3 | date: 2023-03-26 4 | tag: ARMA 5 | description: 6 | videoUrl: 7PSx02C9IkRSg2ITWriKT00xPuPSAyC00Fk51h8pJszIRA 7 | duration: 262 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-temporal-harvest.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - OPERATION TEMPORAL HARVEST 3 | date: 2023-12-06 4 | tag: ARMA 5 | description: 6 | videoUrl: 2fU2iF8pbbfux4ZYJGQnCxCUx59iM7mQBHC6024sWF2g 7 | duration: 534 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /_content/videos/zsu-operation-tzatziki-flip-2-electric-boogaloo.mdx: -------------------------------------------------------------------------------- 1 | --- 2 | title: ZSU - Operation Tzatziki Flip 2 Electric Boogaloo 3 | date: 2023-04-02 4 | tag: ARMA 5 | description: 6 | videoUrl: Kq01X027eQA6Ttw4LS02XcdIDu9EzgaLXLwLHPcWTY02fCY 7 | duration: 468 8 | type: Video 9 | --- 10 | -------------------------------------------------------------------------------- /app/api/page-stats/route.ts: -------------------------------------------------------------------------------- 1 | import { getUmamiToken } from "@/lib/get-analytics"; 2 | import { NextResponse } from "next/server"; 3 | 4 | export const revalidate = 60; 5 | 6 | const { UMAMI_URL, NEXT_PUBLIC_UMAMI_WEBSITE_ID } = process.env; 7 | 8 | async function getUmamiData(token: string, url: string) { 9 | const now = Date.now(); 10 | const oneMonthAgo = now - 30 * 24 * 60 * 60 * 1000; 11 | 12 | const params = new URLSearchParams({ 13 | startAt: oneMonthAgo.toString(), 14 | endAt: now.toString(), 15 | unit: "day", 16 | timezone: "UTC", 17 | url, 18 | }); 19 | 20 | const endpoint = `${UMAMI_URL}/api/websites/${NEXT_PUBLIC_UMAMI_WEBSITE_ID}/stats?${params}`; 21 | 22 | const statsResponse = await fetch(endpoint, { 23 | headers: { 24 | Authorization: `Bearer ${token}`, 25 | Accept: "application/json", 26 | }, 27 | }); 28 | 29 | if (!statsResponse.ok) { 30 | console.error(`Umami API responded with status: ${statsResponse.status}`); 31 | console.error(`Response text: ${await statsResponse.text()}`); 32 | throw new Error( 33 | `Failed to fetch Umami stats data: ${statsResponse.statusText}`, 34 | ); 35 | } 36 | 37 | const stats = await statsResponse.json(); 38 | return stats; // Only return the number of pageviews 39 | } 40 | 41 | export async function GET(request: Request) { 42 | const { searchParams } = new URL(request.url); 43 | const url = searchParams.get("url"); 44 | 45 | if (!url) { 46 | return NextResponse.json( 47 | { error: "URL parameter is required" }, 48 | { status: 400 }, 49 | ); 50 | } 51 | 52 | try { 53 | const token = await getUmamiToken(); 54 | const stats = await getUmamiData(token, url); 55 | return NextResponse.json({ 56 | views: stats.pageviews, 57 | visitors: stats.visitors, 58 | visits: stats.visits, 59 | bounces: stats.bounces, 60 | totalTime: stats.totalTime, 61 | }); 62 | } catch (error) { 63 | console.error("Error fetching Umami data:", error); 64 | return NextResponse.json( 65 | { 66 | error: "Failed to fetch Umami data", 67 | details: (error as Error).message, 68 | }, 69 | { status: 500 }, 70 | ); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /app/api/spotify/top-artists/route.ts: -------------------------------------------------------------------------------- 1 | import { getAccessToken } from "@/lib/spotify"; 2 | import { NextResponse } from "next/server"; 3 | 4 | export async function GET() { 5 | try { 6 | const { access_token } = await getAccessToken(); 7 | 8 | const res = await fetch( 9 | `https://api.spotify.com/v1/me/top/artists?time_range=long_term&limit=10`, 10 | { 11 | headers: { 12 | Authorization: `Bearer ${access_token}`, 13 | }, 14 | }, 15 | ); 16 | 17 | if (!res.ok) { 18 | if (res.status === 401) { 19 | throw new Error("Unauthorized access. Please check your access token."); 20 | } else { 21 | throw new Error("Error fetching top artists. Status:" + res.status); 22 | } 23 | } 24 | 25 | const data = await res.json(); 26 | 27 | return NextResponse.json({ data: data }); 28 | } catch (error) { 29 | console.error("Error fetching top tracks data:", error); 30 | throw error; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/api/spotify/top-tracks/route.ts: -------------------------------------------------------------------------------- 1 | import { getAccessToken } from "@/lib/spotify"; 2 | import { NextResponse } from "next/server"; 3 | 4 | export async function GET() { 5 | try { 6 | const { access_token } = await getAccessToken(); 7 | 8 | const res = await fetch( 9 | `https://api.spotify.com/v1/me/top/tracks?time_range=long_term&limit=10`, 10 | { 11 | headers: { 12 | Authorization: `Bearer ${access_token}`, 13 | }, 14 | }, 15 | ); 16 | 17 | if (!res.ok) { 18 | if (res.status === 401) { 19 | throw new Error("Unauthorized access. Please check your access token."); 20 | } else { 21 | throw new Error( 22 | "Error fetching most played data. Status:" + res.status, 23 | ); 24 | } 25 | } 26 | 27 | const data = await res.json(); 28 | 29 | return NextResponse.json({ data: data }); 30 | } catch (error) { 31 | console.error("Error fetching top tracks data:", error); 32 | throw error; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/api/subscribe/route.ts: -------------------------------------------------------------------------------- 1 | import { NextResponse } from "next/server"; 2 | 3 | export async function POST(req: Request) { 4 | try { 5 | const { email } = await req.json(); 6 | 7 | const response = await fetch( 8 | `https://api.beehiiv.com/v2/publications/${process.env.PUBLICATION_ID}/subscriptions`, 9 | { 10 | method: "POST", 11 | headers: { 12 | "Content-Type": "application/json", 13 | Authorization: `Bearer ${process.env.BEEHIIV_API_KEY}`, 14 | }, 15 | body: JSON.stringify({ email }), 16 | }, 17 | ); 18 | 19 | if (response.ok) { 20 | return NextResponse.json( 21 | { message: "Successfully subscribed!" }, 22 | { status: 200 }, 23 | ); 24 | } else { 25 | const errorData = await response.json(); 26 | return NextResponse.json( 27 | { message: "Failed to subscribe", error: errorData }, 28 | { status: response.status }, 29 | ); 30 | } 31 | } catch (error) { 32 | console.error("Error subscribing:", error); 33 | return NextResponse.json({ message: "An error occurred" }, { status: 500 }); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/api/visitors/route.ts: -------------------------------------------------------------------------------- 1 | import { getUmamiToken } from "@/lib/get-analytics"; 2 | import { NextResponse } from "next/server"; 3 | 4 | export const revalidate = 60; 5 | 6 | const { UMAMI_URL, NEXT_PUBLIC_UMAMI_WEBSITE_ID } = process.env; 7 | 8 | async function getActiveVisitors(token: string) { 9 | const endpoint = `${UMAMI_URL}/api/websites/${NEXT_PUBLIC_UMAMI_WEBSITE_ID}/active`; 10 | 11 | const response = await fetch(endpoint, { 12 | headers: { 13 | Authorization: `Bearer ${token}`, 14 | Accept: "application/json", 15 | }, 16 | }); 17 | 18 | if (!response.ok) { 19 | console.error(`Umami API responded with status: ${response.status}`); 20 | console.error(`Response text: ${await response.text()}`); 21 | throw new Error( 22 | `Failed to fetch active visitors data: ${response.statusText}`, 23 | ); 24 | } 25 | 26 | const data = await response.json(); 27 | return data.visitors; 28 | } 29 | 30 | export async function GET() { 31 | try { 32 | const token = await getUmamiToken(); 33 | const activeVisitors = await getActiveVisitors(token); 34 | return NextResponse.json({ visitors: activeVisitors }); 35 | } catch (error) { 36 | console.error("Error fetching active visitors data:", error); 37 | return NextResponse.json( 38 | { 39 | error: "Failed to fetch active visitors data", 40 | details: (error as Error).message, 41 | }, 42 | { status: 500 }, 43 | ); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zpuckeridge/blog/ccac5f93ed733d7cf292346148e92a498e704241/app/favicon.ico -------------------------------------------------------------------------------- /app/layout.tsx: -------------------------------------------------------------------------------- 1 | import Lanyard from "@/components/lanyard"; 2 | import Navigation from "@/components/navigation/navigation"; 3 | import NowPlaying from "@/components/now-playing"; 4 | import ReturnToIndex from "@/components/return-to-index"; 5 | import { ThemeProvider } from "@/components/theme-provider"; 6 | import { Toaster } from "@/components/ui/toaster"; 7 | import { UMAMI_SCRIPT_URL, UMAMI_WEBSITE_ID } from "@/lib/umami"; 8 | import { cn } from "@/lib/utils"; 9 | import type { Metadata } from "next"; 10 | import { Nanum_Myeongjo as FontSerif } from "next/font/google"; 11 | import localFont from "next/font/local"; 12 | import Script from "next/script"; 13 | import "./globals.css"; 14 | 15 | const fontSans = localFont({ 16 | src: "../fonts/satoshi-variable.woff2", 17 | variable: "--font-sans", 18 | weight: "500", 19 | }); 20 | 21 | const fontSerif = FontSerif({ 22 | subsets: ["latin"], 23 | weight: ["400"], 24 | variable: "--font-serif", 25 | }); 26 | 27 | export const metadata: Metadata = { 28 | metadataBase: new URL("https://zacchary.me"), 29 | alternates: { 30 | types: { 31 | "application/rss+xml": `https://zacchary.me/rss.xml`, 32 | }, 33 | }, 34 | applicationName: "zacchary.me", 35 | authors: { name: "zpuckeridge" }, 36 | creator: "zpuckeridge", 37 | publisher: "zpuckeridge", 38 | generator: "Next.js", 39 | keywords: [ 40 | "zpuckeridge", 41 | "zaccharypuckeridge", 42 | "zaccpuckeridge", 43 | "zacpuckeridge", 44 | "Zacchary Puckeridge", 45 | "Zacc Puckeridge", 46 | "Zac Puckeridge", 47 | "zacc", 48 | "zac", 49 | "zacchary.me", 50 | ], 51 | referrer: "origin-when-cross-origin", 52 | icons: { 53 | icon: "/avatar.avif", 54 | }, 55 | appleWebApp: { 56 | title: "zacchary.me", 57 | statusBarStyle: "default", 58 | }, 59 | formatDetection: { 60 | telephone: false, 61 | }, 62 | title: { 63 | default: "Zacchary Puckeridge", 64 | template: "%s — Zacchary Puckeridge", 65 | }, 66 | description: 67 | "Christian IT Administrator working for Rising Sun Pictures. Building better artist experiences by day, Web Developer by night.", 68 | openGraph: { 69 | url: "https://zacchary.me", 70 | title: "Zacchary Puckeridge", 71 | description: 72 | "Christian IT Administrator working for Rising Sun Pictures. Building better artist experiences by day, Web Developer by night.", 73 | images: "/avatar.avif", 74 | siteName: "zpuckeridge", 75 | }, 76 | twitter: { 77 | creator: "@zpuckeridge", 78 | card: "summary_large_image", 79 | images: "/avatar.avif", 80 | description: 81 | "Christian IT Administrator working for Rising Sun Pictures. Building better artist experiences by day, Web Developer by night.", 82 | creatorId: "zpuckeridge", 83 | title: "Zacchary Puckeridge", 84 | site: "@zpuckeridge", 85 | }, 86 | }; 87 | 88 | export default function RootLayout({ 89 | children, 90 | }: { 91 | children: React.ReactNode; 92 | }) { 93 | return ( 94 | 95 | 102 | 108 |
109 | 110 |
111 | 112 | 113 |
{children}
114 | 115 | 116 | 117 |
118 | 119 |
120 | 121 |
122 | 123 |
124 |
125 | 126 | 127 | 128 | 129 |