Skip to content
View steve-obrien's full-sized avatar

Block or report steve-obrien

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
steve-obrien/README.md

Steve O'Brien Personal Site

Static personal website built with Vue 3, Vite SSG, and Tailwind CSS v4.

Local development

npm install
npm run dev

Build static output

npm run build

Build artifacts are generated in dist/. The build also generates dist/sitemap.xml and dist/robots.txt.

Vendored GetDom components

Selected GetDom Studio components are copied into src/vendor/getdom-studio and committed with the site, following a source-owned pattern similar to shadcn. The source mapping lives in getdom.components.json, and getdom.components.lock.json records the upstream Git revision and the hash of every copied file.

Check for upstream changes without writing files:

npm run getdom:check

Copy a newer clean version from the sibling GetDom checkout:

npm run getdom:sync

The sync refuses to copy uncommitted GetDom source files and refuses to overwrite locally modified vendored files. Use npm run getdom:sync -- --force only when intentionally discarding local changes. Set GETDOM_STUDIO_DIR=/absolute/path/to/getdom.studio when the source checkout is not available at ../getdom.studio.

Outrank webhook publishing

Outrank can publish and update articles by POSTing to a webhook endpoint with Authorization: Bearer <token> as described in the Outrank webhook docs.

Run the local receiver:

OUTRANK_WEBHOOK_ACCESS_TOKEN=your-secret-token npm run outrank-webhook-server

By default it listens on POST /api/outrank/webhook and also accepts POST /webhook. It writes articles to src/pages/articles/content/<slug>.md, so the existing Vite SSG build automatically creates the article index, detail pages, sitemap, and SEO metadata.

Environment variables:

  • OUTRANK_WEBHOOK_ACCESS_TOKEN: required Bearer token configured in Outrank.
  • OUTRANK_WEBHOOK_PORT: optional local server port, default 8790.
  • OUTRANK_WEBHOOK_PATH: optional endpoint path, default /api/outrank/webhook.
  • OUTRANK_WEBHOOK_MAX_BODY_BYTES: optional request size limit, default 5242880.
  • OUTRANK_ARTICLE_CONTENT_DIR: optional markdown output directory, default src/pages/articles/content.

GitHub Pages cannot host POST webhook endpoints. For production, host scripts/outrank-webhook-server.mjs on a small Node service or serverless platform with HTTPS, then commit/push the generated markdown files back to this repository so the Pages workflow deploys the updated static site.

Validate the payload handling without changing real articles:

npm run check:outrank-webhook

Deploy to GitHub Pages

Push to main to trigger .github/workflows/deploy.yml. The workflow builds the site and deploys the static dist/ artifacts to GitHub Pages. GitHub Pages also serves public/404.html as the custom not found page.

Pinned Loading

  1. zero zero Public

    Zero dependency frameworks

    PHP