Skip to content

SafeScribeAI/SafeScribeAI.github.io

Repository files navigation

SafeScribeAI.github.io

Public-facing documentation for SafeScribe — privacy-first AI audio transcription.

Served via GitHub Pages at https://safescribe.dev/.

Structure

index.md                     Root language selector
404.html                     Custom 404 page
robots.txt                   Crawler policy + sitemap pointer
safescribe.svg               Favicon (single SVG)
_config.yml                  Jekyll config (title, description, url, plugins)
_data/
  i18n.yml                   Nav/footer label translations for both languages
  facts.yml                  Canonical numeric/pricing facts (pricing cards render from it)
_layouts/
  default.html               Layout: language-aware nav, footer, lang switcher, SEO/CSP
assets/css/
  style.css                  Custom styles (dark/light mode, all components)
assets/js/
  main.js                    Nav toggle, lang dropdown, pricing save badges
<lang>/                          2 languages: en tr
  index.md                   Home (How It Works, pricing, FAQ)
  privacy.md                 Privacy Policy
  security.md                Security Architecture
  dpia.md                    Data Protection Impact Assessment
  terms.md                   Terms of Use
  resources.md               Resources hub (links to /en/resources/* deep pages)
  whats-new.md               Release notes
  support.md                 Support / contact
en/resources/                English-only deep pages (how-we-compare, security-tradeoffs, our-stack)

Language coverage: Both languages ship the full set of 8 pages; the three en/resources/ deep pages are English-only.

Adding a new language page

  1. Create <lang>/page-name.md with front matter:
    ---
    layout: default
    title: "Page Title"
    lang: tr
    ---
  2. If it's a new page type that only exists in en/tr, no extra work needed — the nav and footer automatically fall back to /en/page-name.
  3. If it will exist in both languages, add translations to _data/i18n.yml (nav_*, link_* fields).

Adding a new language

  1. Create <lang>/index.md and <lang>/privacy.md with lang: <code> front matter.
  2. Add a new entry to _data/i18n.yml with all required fields (copy the en block as a template).
  3. Add <lang> to the all_langs string in _layouts/default.html.

Release

./safescribe.sh release-site (from the SafeScribeAI/ root) or bash scripts/release.sh (from this repo) is the canonical path: run once after bash scripts/install-hooks.sh (this repo shipped with no installed hooks before). It runs the weekly heavy layer (jekyll build + ../scripts/check_facts.py + html-proofer against _site/) before pushing, pushes to main (which both fires the pre-push gate and triggers GitHub's own Pages build — the two collapse into one action here), then polls GitHub's Pages build API (via the gh CLI — the endpoint needs auth even for public repos) until the pushed commit shows status: built.

Local preview

bundle install
bundle exec jekyll serve
# Open http://localhost:4000

The Gemfile pins the github-pages gem so local preview matches the exact Jekyll + plugin versions GitHub Pages builds with.

Ruby version: github-pages pins Jekyll 3.9.0 → liquid 4.0.3, which calls String#tainted? — removed in Ruby 3.2. On Ruby >= 3.2, bundle exec jekyll build/serve fails with undefined method 'tainted?'. .ruby-version (3.1.7) documents the working version; scripts/pre-push and scripts/release.sh auto-prefer a keg-only brew install ruby@3.1 if present (/opt/homebrew/opt/ruby@3.1/bin) — install it once and both scripts pick it up automatically. Without it, run bundle exec jekyll ... manually via that Ruby, or expect the pre-push gate to warn and the build to fail.

About

Audio transcription that doesn't store your audio. SafeScribeAI runs Whisper, encrypts in transit, deletes on completion.

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages