{"id":50812449,"url":"https://github.com/mhgbrown/blog","last_synced_at":"2026-06-13T06:06:46.492Z","repository":{"id":40951506,"uuid":"169093273","full_name":"mhgbrown/blog","owner":"mhgbrown","description":"Astro-based Blog","archived":false,"fork":false,"pushed_at":"2026-05-30T10:24:13.000Z","size":4274,"stargazers_count":1,"open_issues_count":26,"forks_count":0,"subscribers_count":0,"default_branch":"master","last_synced_at":"2026-05-30T12:11:42.138Z","etag":null,"topics":["astro","gh-pages","gray-matter","highlightjs","remarkable"],"latest_commit_sha":null,"homepage":"https://blog.mhgbrown.is","language":"Astro","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mhgbrown.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-02-04T14:46:14.000Z","updated_at":"2026-05-30T10:24:16.000Z","dependencies_parsed_at":"2023-02-01T07:35:15.077Z","dependency_job_id":null,"html_url":"https://github.com/mhgbrown/blog","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/mhgbrown/blog","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhgbrown%2Fblog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhgbrown%2Fblog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhgbrown%2Fblog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhgbrown%2Fblog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mhgbrown","download_url":"https://codeload.github.com/mhgbrown/blog/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhgbrown%2Fblog/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34273841,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-13T02:00:06.617Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["astro","gh-pages","gray-matter","highlightjs","remarkable"],"created_at":"2026-06-13T06:06:45.755Z","updated_at":"2026-06-13T06:06:46.483Z","avatar_url":"https://github.com/mhgbrown.png","language":"Astro","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Morgan Brown's Blog\n\nA modern, high-performance static blog powered by **Astro**, clean/minimalist vanilla **CSS**, and **GitHub Actions**.\n\nThis project has been completely modernized from the legacy Nuxt 2 \u0026 Travis CI codebase into a single-repository static setup designed for outstanding performance, ease of use, premium SEO, and ultimate simplicity.\n\n---\n\n## Key Features\n\n- **Unified Architecture (Single Repository):** All blog posts have been consolidated directly into the codebase under `src/content/posts/`. No more split-repository maintenance!\n- **Premium SEO Performance:**\n  - **Google Structured Data (JSON-LD):** Automatically injects clean, compliant Schema.org `BlogPosting` structured metadata on every post page, maximizing search engine snippet richness.\n  - **SEO-Friendly Clean Slugs:** Replaced legacy, opaque git blob SHA hashes with human-readable, descriptive URL slugs (e.g., `/posts/un-cyanogenmoding-a-motorola-droid/`).\n  - **Zero-Broken-Links Redirects:** Dynamically compiles fallback HTML redirects at `/posts/[legacy-git-sha]/` that instantly point users to the new clean slugs, preserving all historical backlinks.\n  - **Smart Custom Sitemap:** Built-in compiler hook that dynamically generates `sitemap.xml` upon every build, filtering out redirection routes so crawlers only index pristine canonical paths.\n- **Modern Developer Experience:**\n  - Fast compiler powered by **Astro** \u0026 **Vite**.\n  - Typography-rich layout styled with custom, lightweight CSS variables \u0026 vanilla CSS optimized for light/dark mode out of the box.\n  - Compile-time schema type safety using Astro's **Content Collections** (`src/content/config.js`).\n- **Fully Automated Deployment:** Built-in GitHub Actions workflow (`.github/workflows/deploy.yml`) builds and deploys your site directly to **GitHub Pages** securely on every push to `master`.\n\n---\n\n## Directory Structure\n\n```text\n├── .github/workflows/deploy.yml  # Automated GitHub Actions Pages deployment\n├── public/\n│   ├── CNAME                     # Custom domain (blog.mhgbrown.is)\n│   └── favicon.png               # Site favicon\n├── src/\n│   ├── content/\n│   │   ├── config.js             # Content Collections frontmatter schemas\n│   │   └── posts/                # Unified markdown blog posts\n│   ├── layouts/\n│   │   └── Layout.astro          # HTML document layout, SEO headers, \u0026 JSON-LD (styled with vanilla CSS)\n│   ├── pages/\n│   │   ├── index.astro           # Home page list of active/archived posts\n│   │   └── posts/[slug].astro    # Dynamic slug rendering \u0026 SHA compatibility redirects\n│   └── utils/\n│       └── blogUtils.js          # Slugifiers, SHA-to-filename mappings, \u0026 helpers\n├── astro.config.mjs              # Astro integrations \u0026 lightweight sitemap generator\n└── tsconfig.json                 # Type resolution \u0026 module compiler config\n```\n\n---\n\n## Development Setup\n\nEnsure you are using Node.js version **24+** (configured in `.node-version`).\n\n### Install Dependencies\n\n```bash\nnpm install\n```\n\n### Run Local Development Server\n\nLaunches a hot-reloading development server at [http://localhost:4321/](http://localhost:4321/).\n\n```bash\nnpm run dev\n```\n\n### Create a Production Build\n\nCompiles a optimized static build of the site inside the `dist/` directory, including automatic sitemap generation.\n\n```bash\nnpm run build\n```\n\n### Preview the Static Build\n\nRuns a local web server to inspect the static production build compiled inside `dist/`.\n\n```bash\nnpm run preview\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmhgbrown%2Fblog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmhgbrown%2Fblog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmhgbrown%2Fblog/lists"}