{"id":31755044,"url":"https://github.com/bmcandr/bmcandr.github.io","last_synced_at":"2026-05-18T03:08:54.253Z","repository":{"id":55936990,"uuid":"233144477","full_name":"bmcandr/bmcandr.github.io","owner":"bmcandr","description":"Personal website repository.","archived":false,"fork":false,"pushed_at":"2023-09-04T22:22:54.000Z","size":5254,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-04-25T05:12:00.683Z","etag":null,"topics":["earth-observation","geojson","github-actions","github-pages","leaflet","raster","sentinel-2","stac"],"latest_commit_sha":null,"homepage":"https://bmcandr.github.io","language":"JavaScript","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/bmcandr.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}},"created_at":"2020-01-10T23:01:08.000Z","updated_at":"2023-07-16T04:46:11.000Z","dependencies_parsed_at":"2023-10-01T14:51:58.182Z","dependency_job_id":null,"html_url":"https://github.com/bmcandr/bmcandr.github.io","commit_stats":{"total_commits":116,"total_committers":2,"mean_commits":58.0,"dds":0.08620689655172409,"last_synced_commit":"b4ddce1e0d5c1ee34e2ef5832fd7f80132ee5981"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/bmcandr/bmcandr.github.io","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmcandr%2Fbmcandr.github.io","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmcandr%2Fbmcandr.github.io/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmcandr%2Fbmcandr.github.io/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmcandr%2Fbmcandr.github.io/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bmcandr","download_url":"https://codeload.github.com/bmcandr/bmcandr.github.io/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bmcandr%2Fbmcandr.github.io/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001933,"owners_count":26083226,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"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":["earth-observation","geojson","github-actions","github-pages","leaflet","raster","sentinel-2","stac"],"created_at":"2025-10-09T18:30:32.879Z","updated_at":"2026-05-18T03:08:54.246Z","avatar_url":"https://github.com/bmcandr.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# bmcandr.github.io\n\nPersonal website for Brendan McAndrew, built with [Astro 4](https://astro.build) and deployed to GitHub Pages.\n\n## Development\n\n```bash\nnpm install\nnpm run dev       # dev server at http://localhost:4321 (hot reload)\nnpm run build     # production build → dist/\nnpm run preview   # serve dist/ locally to verify before deploying\nnpm test          # run tests\n```\n\n## Deployment\n\nDeployment is automatic via GitHub Actions on every push to `main`. See [`.github/workflows/deploy.yml`](.github/workflows/deploy.yml).\n\nTo deploy:\n\n1. Merge your branch to `main` (or push directly)\n2. GitHub Actions builds and publishes to GitHub Pages\n3. Live at [https://bmcandr.github.io](https://bmcandr.github.io)\n\n## Adding Projects\n\nEdit [`src/data/projects.js`](src/data/projects.js). Each entry follows this shape:\n\n```js\n{\n  slug: \"my-project\",          // used for /projects/my-project URL (if write-up exists)\n  title: \"My Project\",\n  description: \"One or two sentences about what it does.\",\n  tech: [\"Python\", \"MapLibre\", \"STAC\"],\n  github: \"https://github.com/bmcandr/my-project\",  // or null\n  demo: null,                  // live demo URL or null\n  snippet: {                   // optional code sample shown on the card\n    code: `import pystac_client\\nclient = pystac_client.Client.open(...)`,\n    lang: \"python\",\n  },\n}\n```\n\nRemove the placeholder entry before going live.\n\n## Writing a Project Page\n\nProject pages are MDX files that support inline interactive maps.\n\n1. Create `src/pages/projects/my-project.mdx`\n2. Write in Markdown, embed maps with the `Map` component:\n\n```mdx\n---\nlayout: ../../components/ProjectLayout.astro\ntitle: My Project\n---\n\nimport Map from '../../components/map/Map.tsx';\n\n# My Project\n\nSome context about the area of interest...\n\n\u003cMap client:load center={[-77.4, 38.9]} zoom={8} height=\"500px\" /\u003e\n\nAnalysis continues here...\n```\n\n`Map` props: `center` (`[lng, lat]`), `zoom` (number), `height` (CSS string, default `\"400px\"`).\n\n### Code snippets\n\nFenced code blocks are syntax-highlighted by Shiki automatically — no imports needed:\n\n````mdx\nHere's how to open a STAC catalog:\n\n```python\nimport pystac_client\n\nclient = pystac_client.Client.open(\"https://earth-search.aws.element84.com/v1\")\nresults = client.search(collections=[\"sentinel-2-l2a\"], bbox=[-77.5, 38.8, -77.0, 39.0])\n```\n````\n\nSupported language tags include `python`, `javascript`, `typescript`, `bash`, `json`, `sql`, and [many more](https://shiki.style/languages).\n\n## Structure\n\n```text\nsrc/\n├── components/\n│   ├── Layout.astro       # HTML shell (title prop)\n│   ├── Hero.astro         # Full-viewport satellite image section\n│   ├── Nameplate.astro    # Name, tagline, social links, scroll indicator\n│   ├── Projects.astro      # Project grid section\n│   ├── ProjectLayout.astro # Layout for MDX project write-up pages\n│   ├── ProjectCard.astro  # Individual project card (Shiki code highlighting)\n│   └── map/\n│       └── Map.tsx        # MapLibre GL map (React, use with client:load in MDX)\n├── data/\n│   └── projects.js        # Project data — edit this to add/update projects\n├── pages/\n│   ├── index.astro        # Homepage (Hero + Projects)\n│   └── projects/\n│       ├── [slug].astro   # Project page template\n│       └── *.mdx          # Individual project write-ups (add here)\n└── styles/\n    └── global.css         # Font import + body reset\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmcandr%2Fbmcandr.github.io","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbmcandr%2Fbmcandr.github.io","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbmcandr%2Fbmcandr.github.io/lists"}