├── .github └── dependabot.yml ├── .gitignore ├── .npmrc ├── .stackblitzrc ├── LICENSE ├── README.md ├── astro.config.mjs ├── netlify.toml ├── package.json ├── postcss.config.cjs ├── public ├── images │ ├── Golang-Basics.png │ ├── creek.png │ ├── favicon.ico │ ├── introducing-astro.jpg │ ├── javascript-logo-banner.jpg │ └── social.jpg ├── robots.txt └── search-index.json ├── scripts └── search │ ├── package.json │ └── prepare-index.js ├── src ├── components │ ├── BlogPost.astro │ ├── Card.astro │ ├── Footer │ │ ├── Footer.astro │ │ ├── Social.astro │ │ └── Squiggle.astro │ ├── Head │ │ ├── BaseHead.astro │ │ └── GoogleAnalytics.astro │ ├── HomeHeader.astro │ ├── Nav.astro │ ├── Paginator.astro │ ├── SearchInput.astro │ └── Subscribe │ │ └── EmailSignup.astro ├── layouts │ └── BlogPostLayout.astro ├── pages │ ├── 404.astro │ ├── index.astro │ ├── posts │ │ ├── [...page].astro │ │ ├── how-to-compare-dates-in-javascript.md │ │ ├── installing-go-on-a-mac.md │ │ └── introducing-astro.md │ ├── rss.xml.js │ └── search.astro └── styles │ ├── content.scss │ ├── custom.scss │ ├── global.scss │ ├── main.scss │ ├── site.scss │ └── variables.scss ├── tailwind.config.js ├── tsconfig.json └── yarn.lock /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Enable version updates for npm 4 | - package-ecosystem: "npm" 5 | # Look for `package.json` and `lock` files in the `root` directory 6 | directory: "/" 7 | # Check for updates once a week 8 | schedule: 9 | interval: "weekly" -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # build output 2 | dist 3 | 4 | # dependencies 5 | node_modules/ 6 | .snowpack/ 7 | 8 | # logs 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | 13 | # environment variables 14 | .env 15 | .env.production 16 | 17 | # macOS-specific files 18 | .DS_Store 19 | 20 | #cypress 21 | cypress/videos 22 | cypress/screenshots -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | ## force pnpm to hoist 2 | shamefully-hoist = true -------------------------------------------------------------------------------- /.stackblitzrc: -------------------------------------------------------------------------------- 1 | { 2 | "startCommand": "npm start", 3 | "env": { 4 | "ENABLE_CJS_IMPORTS": true 5 | } 6 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Robert Guss 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Astro Creek - a blog theme for Astro 2 | 3 | ![](./public/images/creek.png) 4 | 5 | Creek is an open source blog theme for [Astro SSG](https://docs.astro.build/getting-started/). 6 | 7 | ## Demo 8 | 9 | [View Creek on Netlify](https://astro-theme-creek.netlify.app/) 10 | 11 | ## Credits 12 | 13 | This theme is built upon a theme called [Starter's Creek](https://github.com/statamic/starter-kit-starters-creek) for [Statamic CMS](https://statamic.com/). Full design credit goes to [Jack McDade](https://twitter.com/jackmcdade). 14 | 15 | This theme also take's some ideas and functionality from [Ink](https://github.com/one-aalam/astro-ink), another great theme for Astro. 16 | 17 | ## Features 18 | 19 | - Search powered by [Lunr.js](https://lunrjs.com/) and [Mark.js](https://markjs.io/) 20 | - Sitemap 21 | - RSS Feed 22 | - SEO ready. If you are looking for more SEO functionality, check out this [Astro SEO Plugin](https://github.com/jonasmerlin/astro-seo). 23 | 24 | ## Misc. 25 | 26 | This theme used to power my personal site [HowToCode.io](https://howtocode.io), the repo of which can be found [here](https://github.com/robertguss/HowToCode-Astro) 27 | -------------------------------------------------------------------------------- /astro.config.mjs: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "astro/config"; 2 | import sitemap from "@astrojs/sitemap"; 3 | 4 | export default defineConfig({ 5 | integrations: [sitemap()], 6 | site: "https://astro-theme-creek.netlify.app/", 7 | }); 8 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | command = "yarn build" 3 | publish = "dist" 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "astro-theme-creek", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "astro dev", 7 | "start": "astro dev", 8 | "build": "astro build", 9 | "postbuild": "node ./scripts/search/prepare-index.js", 10 | "preview": "astro preview" 11 | }, 12 | "devDependencies": { 13 | 14 | "astro": "^4.16.8", 15 | "globby": "^14.0.1", 16 | "mark.js": "^8.11.1", 17 | "sass": "^1.77.8", 18 | "tailwindcss": "^3.4.14" 19 | }, 20 | "dependencies": { 21 | "@astrojs/rss": "^4.0.5", 22 | "@astrojs/sitemap": "^3.2.0", 23 | "autoprefixer": "^10.4.19", 24 | "dayjs": "^1.11.12", 25 | "lunr": "^2.3.9", 26 | "sitemap": "^7.1.1" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: [require("autoprefixer"), require("tailwindcss")], 3 | }; 4 | -------------------------------------------------------------------------------- /public/images/Golang-Basics.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertguss/Astro-Theme-Creek/868cbf9750e55bf31422876c01709e57ba16af14/public/images/Golang-Basics.png -------------------------------------------------------------------------------- /public/images/creek.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertguss/Astro-Theme-Creek/868cbf9750e55bf31422876c01709e57ba16af14/public/images/creek.png -------------------------------------------------------------------------------- /public/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertguss/Astro-Theme-Creek/868cbf9750e55bf31422876c01709e57ba16af14/public/images/favicon.ico -------------------------------------------------------------------------------- /public/images/introducing-astro.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertguss/Astro-Theme-Creek/868cbf9750e55bf31422876c01709e57ba16af14/public/images/introducing-astro.jpg -------------------------------------------------------------------------------- /public/images/javascript-logo-banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertguss/Astro-Theme-Creek/868cbf9750e55bf31422876c01709e57ba16af14/public/images/javascript-logo-banner.jpg -------------------------------------------------------------------------------- /public/images/social.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/robertguss/Astro-Theme-Creek/868cbf9750e55bf31422876c01709e57ba16af14/public/images/social.jpg -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | 4 | Sitemap: https://howtocode.io/sitemap.xml -------------------------------------------------------------------------------- /public/search-index.json: -------------------------------------------------------------------------------- 1 | [{"slug":"how-to-compare-dates-in-javascript","category":"blog","title":"How to compare dates in JavaScript","description":"How to compare dates in JavaScript natively using the Date Object, without using any third-party libraries.","tags":["javascript"],"body":"\nWorking with dates in JavaScript can be tricky to say the least. Recently I needed to compare two dates with one another to see which was greater than, less than, etc.\n\nIn my particular use case, I was using a date-picker that was returning a string like `01/28/2020`. I needed to see if this date was `>=` to the current day.\n\nThe first thing I needed to do was convert this string into a JavaScript Date Object.\n\n```js\nconst date: new Date(\"01/28/2020\");\nconsole.log(date);\n// Tue Jan 28 2020 00:00:00 GMT-0500 (Eastern Standard Time)\n```\n\nThen, compare this date with the current day:\n\n```js\nconst compareDate = new Date(\"01/28/2020\");\nconst today = new Date();\nconsole.log(compareDate >= today);\n// false\n```\n\nThe issue is that even though the dates are the same, the times are not.\n\n```js\nconst compareDate = new Date(\"01/28/2020\");\nconst today = new Date();\nconsole.log(\"compareDate: \", compareDate);\nconsole.log(\"today: \", today);\n// compareDate: Tue Jan 28 2020 00:00:00 GMT-0500 (Eastern Standard Time)\n// today: Tue Jan 28 2020 21:33:27 GMT-0500 (Eastern Standard Time)\n```\n\nNotice how `compareDate` has all zero's for time. The difference in time is the reason why this comparison fails. To fix this, we need to create the current day without time. We do this by instantiating a new JS Date object by individually passing in the year, month and day.\n\n```js\nconst todayWithoutTime = new Date(\n new Date().getFullYear(),\n new Date().getMonth(),\n new Date().getDate()\n);\nconsole.log(\"todayWithoutTime: \", todayWithoutTime);\n// todayWithoutTime: Tue Jan 28 2020 00:00:00 GMT-0500 (Eastern Standard Time)\n```\n\nSo let's try our comparison again.\n\n```js\nconst compareDate = new Date(\"01/28/2020\");\nconst todayWithoutTime = new Date(\n new Date().getFullYear(),\n new Date().getMonth(),\n new Date().getDate()\n);\nconsole.log(compareDate >= todayWithoutTime);\n// true\n```\n\nThat's it. Just remember that when comparing dates in JavaScript it is vital to factor in the time. 😎\n"},{"slug":"installing-go-on-a-mac","category":"blog","title":"Installing Go on a Mac","description":"In this article, I am going to show you how to install & setup Go (Golang) on Mac and also setup/configure VS Code for writing Go (Golang) code.","tags":["go"],"body":"\nIn this article, I am going to show you how to install & setup Go on Mac and also setup/configure VS Code for writing Go code.\n\n## Install\n\nThe easiest way to install go is via go's website [Golang.org](https://golang.org/dl). After going to this page, click on the link for 'Apple macOS' and run the installer.\n\nIf you have [Homebrew](https://brew.sh/) installed you can run the command `brew install golang`\n\nAfter you have installed, let's verify and test that everything is working.\n\nRun this command in your terminal:\n\n```bash\ngo version\n\n# You should see an output similar to the following:\n# go version go1.13.7 darwin/amd64\n```\n\n## Workspace Setup\n\nGo has this concept of a 'workspace,' which is where all of your source code and 3rd party packages, binaries etc. are all stored. On a mac this location is under:\n\n```bash\n/Users//go\n\n# mine is: /Users/rguss/go/src\n```\n\nThis location is also known as your `GOPATH`. The location of this path and various other Go specific ENV Variables can be located with the command:\n\n```bash\ngo env\n```\n\nYou will also need to create 3 directories inside of your `$GOPATH` with the following:\n\n```bash\nmkdir -p $GOPATH $GOPATH/src $GOPATH/pkg $GOPATH/bin\n```\n\n## Hello World\n\nLet's create a simple hello world program and build it to make sure we have everything configured correctly.\n\nInside of your `$GOPATH/src` directory create a directory called `hello` and then a file called `hello.go` inside of it.\n\nIt should look like this `$GOPATH/src/hello/hello.go`\n\nThen paste the following into `hello.go`:\n\n```go\npackage main\n\nimport \"fmt\"\n\nfunc main() {\n\tfmt.Printf(\"Hello, World!\")\n}\n```\n\nThen build it with the go tool:\n\n```bash\ncd $HOME/go/src/hello\ngo build\n```\n\nThen:\n\n```bash\n./hello\n\n# Output should be:\n# Hello, World!\n```\n\nIf you see `Hello, World!` output to the console, you are all set!\n\n## VS Code\n\nThe final step is to set up and configure [VS Code](https://code.visualstudio.com/) to write Go code. It is as simple as\ninstalling a single extension called [Go](https://marketplace.visualstudio.com/items?itemName=ms-vscode.Go). Once installed, you are all set and ready to start writing Go.\n\n## Additional Resources\n\n- [Golang.org](https://golang.org/)\n- [Go.dev](https://go.dev/)\n"},{"slug":"introducing-astro","category":"blog","title":"Introducing Astro: Ship Less JavaScript","description":"We're excited to announce Astro as a new way to build static websites and deliver lightning-fast performance without sacrificing a modern developer experience.","tags":["astro"],"body":"\nThere's a simple secret to building a faster website — _just ship less_.\n\nUnfortunately, modern web development has been trending in the opposite direction—towards _more._ More JavaScript, more features, more moving parts, and ultimately more complexity needed to keep it all running smoothly.\n\nToday I'm excited to publicly share Astro: a new kind of static site builder that delivers lightning-fast performance with a modern developer experience. To design Astro, we borrowed the best parts of our favorite tools and then added a few innovations of our own, including:\n\n- **Bring Your Own Framework (BYOF):** Build your site using React, Svelte, Vue, Preact, web components, or just plain ol' HTML + JavaScript.\n- **100% Static HTML, No JS:** Astro renders your entire page to static HTML, removing all JavaScript from your final build by default.\n- **On-Demand Components:** Need some JS? Astro can automatically hydrate interactive components when they become visible on the page. If the user never sees it, they never load it.\n- **Fully-Featured:** Astro supports TypeScript, Scoped CSS, CSS Modules, Sass, Tailwind, Markdown, MDX, and any of your favorite npm packages.\n- **SEO Enabled:** Automatic sitemaps, RSS feeds, pagination and collections take the pain out of SEO and syndication.\n\nThis post marks the first public beta release of Astro. **Missing features and bugs are still to be expected at this early stage.** There are still some months to go before an official 1.0 release, but there are already several fast sites built with Astro in production today. We would love your early feedback as we move towards a v1.0 release later this year.\n\n> To learn more about Astro and start building your first site, check out [the project README.](https://github.com/snowpackjs/astro#-guides).\n\n## Getting Started\n\nStarting a new project in Astro is easy:\n\n```shell\n# create your project\nmkdir new-project-directory\ncd new-project-directory\nnpm init astro\n\n# install your dependencies\nnpm install\n\n# start the dev server and open your browser\nnpm run dev\n```\n\n> To learn more about Astro and start building your first site, check out [the project README.](https://github.com/snowpackjs/astro#-guides).\n\n## How Astro Works\n\nAstro works a lot like a static site generator. If you have ever used Eleventy, Hugo, or Jekyll (or even a server-side web framework like Rails, Laravel, or Django) then you should feel right at home with Astro.\n\nIn Astro, you compose your website using UI components from your favorite JavaScript web framework (React, Svelte, Vue, etc). Astro renders your entire site to static HTML during the build. The result is a fully static website with all JavaScript removed from the final page. No monolithic JavaScript application required, just static HTML that loads as fast as possible in the browser regardless of how many UI components you used to generate it.\n\nOf course, sometimes client-side JavaScript is inevitable. Image carousels, shopping carts, and auto-complete search bars are just a few examples of things that require some JavaScript to run in the browser. This is where Astro really shines: When a component needs some JavaScript, Astro only loads that one component (and any dependencies). The rest of your site continues to exist as static, lightweight HTML.\n\nIn other full-stack web frameworks this level of per-component optimization would be impossible without loading the entire page in JavaScript, delaying interactivity. In Astro, this kind of [partial hydration](https://addyosmani.com/blog/rehydration/) is built into the tool itself.\n\nYou can even [automatically defer components](https://codepen.io/jonneal/full/ZELvMvw) to only load once they become visible on the page with the `client:visible` directive.\n\nThis new approach to web architecture is called [islands architecture](https://jasonformat.com/islands-architecture/). We didn't coin the term, but Astro may have perfected the technique. We are confident that an HTML-first, JavaScript-only-as-needed approach is the best solution for the majority of content-based websites.\n\n> To learn more about Astro and start building your first site, check out [the project README.](https://github.com/snowpackjs/astro#-guides)\n\n## Embracing the Pit of Success\n\n> A well-designed system makes it easy to do the right things and annoying (but not impossible) to do the wrong things

– Jeff Atwood

[Falling Into The Pit of Success](https://blog.codinghorror.com/falling-into-the-pit-of-success/)
\n\nPoor performance is often framed as a failure of the developer, but we respectfully disagree. In many cases, poor performance is a failure of tooling. It should be difficult to build a slow website.\n\nAstro's main design principle is to lead developers into what [Rico Mariani](https://twitter.com/ricomariani) dubbed \"the pit of success\". It is our goal to build every site \"fast by default\" while also delivering a familiar, modern developer experience.\n\nBy building your site to static HTML by default, Astro makes it difficult (but never impossible 😉) to build a slow site.\n\n## Long-Term Sustainability\n\nAstro is built by the team of open source developers behind [Snowpack](https://snowpack.dev) and [Skypack](https://skypack.dev), with additional contributions from the community.\n\n**Astro is and always will be free.** It is an open source project released under the [MIT license](https://github.com/snowpackjs/astro/blob/main/LICENSE).\n\nWe care deeply about building a more sustainable future for open source software. At the same time, we need to support Astro's development long-term. This requires money (donations alone aren't enough.)\n\nWe're inspired by the early success of projects like [Tailwind](https://tailwindcss.com/), [Rome](https://rome.tools/), [Remix](https://remix.run/), [Ionic](https://ionicframework.com/), and others who are experimenting with long-term financial sustainability on top of Open Source. Over the next year we'll be exploring how we can create a sustainable business to support a 100% free, open source Astro for years to come.\n\nIf your company is as excited about Astro as we are, [we'd love to hear from you.](https://astro.build/chat)\n\nFinally, I'd like to give a **HUGE** thanks to the 300+ developers who joined our earliest private beta. Your feedback has been essential in shaping Astro into the tool it is today. If you're interested in getting involved (or just following along with development) please [join us on Discord.](https://astro.build/chat)\n\n> To learn more about Astro and start building your first site, check out [the project README.](https://github.com/snowpackjs/astro#-guides)\n"}] -------------------------------------------------------------------------------- /scripts/search/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "search", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "prepare-index.js", 6 | "type": "module", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1" 9 | }, 10 | "author": "Aftab Alam", 11 | "license": "ISC" 12 | } 13 | -------------------------------------------------------------------------------- /scripts/search/prepare-index.js: -------------------------------------------------------------------------------- 1 | import path from "path"; 2 | import { promises as fs } from "fs"; 3 | import { globby } from "globby"; 4 | import os from "os"; 5 | import grayMatter from "gray-matter"; 6 | 7 | (async function () { 8 | // prepare the dirs 9 | const srcDir = path.join(process.cwd(), "src"); 10 | const publicDir = path.join(process.cwd(), "public"); 11 | const contentDir = path.join(srcDir, "pages", "posts"); 12 | let contentFilePattern = path.join(contentDir, "*.md"); 13 | if(os.platform().includes("win")) { 14 | contentFilePattern = contentFilePattern.replaceAll("\\", "/"); 15 | } 16 | const indexFile = path.join(publicDir, "search-index.json"); 17 | const getSlugFromPathname = (pathname) => 18 | path.basename(pathname, path.extname(pathname)); 19 | 20 | const contentFilePaths = await globby([contentFilePattern]); 21 | 22 | if (contentFilePaths.length) { 23 | const files = contentFilePaths.map( 24 | async (filePath) => await fs.readFile(filePath, "utf8") 25 | ); 26 | const index = []; 27 | let i = 0; 28 | for await (let file of files) { 29 | const { 30 | data: { title, description, tags }, 31 | content, 32 | } = grayMatter(file); 33 | index.push({ 34 | slug: getSlugFromPathname(contentFilePaths[i]), 35 | category: "blog", 36 | title, 37 | description, 38 | tags, 39 | body: content, 40 | }); 41 | i++; 42 | } 43 | await fs.writeFile(indexFile, JSON.stringify(index)); 44 | console.log( 45 | `Indexed ${index.length} documents from ${contentDir} to ${indexFile}` 46 | ); 47 | } 48 | })(); 49 | -------------------------------------------------------------------------------- /src/components/BlogPost.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import EmailSignup from './Subscribe/EmailSignup.astro' 3 | 4 | export interface Props { 5 | title: string; 6 | date: string; 7 | hero: string; 8 | youtube: string; 9 | } 10 | 11 | const { title, date, hero, youtube } = Astro.props; 12 | --- 13 | 14 |
15 |
16 |

{title}

17 |
18 | 19 | 20 | {hero && {title}} 21 | 22 | 23 | {youtube &&
24 | 27 |
} 28 | 29 | 30 |
31 | 32 |
33 | 34 | 35 |
36 | -------------------------------------------------------------------------------- /src/components/Card.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import dayjs from 'dayjs' 3 | 4 | export interface Props { 5 | post: any; 6 | } 7 | 8 | const { post } = Astro.props; 9 | --- 10 | 11 | 14 | 15 | {post.frontmatter.title} 16 |
17 |

18 | {post.frontmatter.title} 19 |

20 |

21 | {dayjs(post.frontmatter.pubDate).format('MM-DD-YYYY')} 22 |

23 |
24 |
25 | 26 | -------------------------------------------------------------------------------- /src/components/Footer/Footer.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Squiggle from './Squiggle.astro' 3 | import Social from './Social.astro' 4 | --- 5 | 6 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /src/components/Footer/Social.astro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/components/Footer/Squiggle.astro: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/components/Head/BaseHead.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import GoogleAnalytics from './GoogleAnalytics.astro' 3 | import '../../styles/main.scss' 4 | 5 | export interface Props { 6 | title: string; 7 | description: string; 8 | } 9 | const { title, description} = Astro.props; 10 | 11 | let permalink = 'https://howtocode.io'; 12 | --- 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | {title} 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /src/components/Head/GoogleAnalytics.astro: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /src/components/HomeHeader.astro: -------------------------------------------------------------------------------- 1 | --- 2 | export interface Props { 3 | title: string; 4 | description: string; 5 | } 6 | const { title, description } = Astro.props; 7 | --- 8 | 9 |
10 |

{title}

11 |

{description}

12 |
-------------------------------------------------------------------------------- /src/components/Nav.astro: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | --- 4 | 5 | -------------------------------------------------------------------------------- /src/components/Paginator.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const { page } = Astro.props 3 | --- 4 | 5 |
6 | {page.url.prev && 7 | 11 | Prev 12 | 13 | } 14 | 15 | {page.url.next && 16 | 19 | Next 20 | 21 | } 22 |
23 | -------------------------------------------------------------------------------- /src/components/SearchInput.astro: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | --- 4 | 5 | 6 | 7 | 8 |
9 |
10 | 11 |
12 | 13 | 14 |
15 | 16 | 17 | 168 | 169 | 172 |
-------------------------------------------------------------------------------- /src/components/Subscribe/EmailSignup.astro: -------------------------------------------------------------------------------- 1 | 12 | -------------------------------------------------------------------------------- /src/layouts/BlogPostLayout.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Nav from '../components/Nav.astro'; 3 | import BaseHead from '../components/Head/BaseHead.astro'; 4 | import BlogPost from '../components/BlogPost.astro'; 5 | 6 | const {content} = Astro.props; 7 | const {title, description, date, hero, youtube} = content; 8 | --- 9 | 10 | 11 | 12 | 13 | 14 | 15 |