diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 480ffaa..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..2062b03 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,108 @@ +name: Deploy site + +on: + push: + branches: + - master + - main + paths: + - "assets/**" + - "**.bib" + - "**.html" + - "**.js" + - "**.liquid" + - "**/*.md" + - "**.yml" + - "Gemfile" + - "Gemfile.lock" + - "!.github/workflows/axe.yml" + - "!.github/workflows/broken-links.yml" + - "!.github/workflows/deploy-docker-tag.yml" + - "!.github/workflows/deploy-image.yml" + - "!.github/workflows/docker-slim.yml" + - "!.github/workflows/lighthouse-badger.yml" + - "!.github/workflows/prettier.yml" + - "!lighthouse_results/**" + - "!docs/CONTRIBUTING.md" + - "!docs/CUSTOMIZE.md" + - "!docs/FAQ.md" + - "!docs/INSTALL.md" + - "!README.md" + pull_request: + branches: + - master + - main + paths: + - "assets/**" + - "**.bib" + - "**.html" + - "**.js" + - "**.liquid" + - "**/*.md" + - "**.yml" + - "Gemfile" + - "Gemfile.lock" + - "!.github/workflows/axe.yml" + - "!.github/workflows/broken-links.yml" + - "!.github/workflows/deploy-docker-tag.yml" + - "!.github/workflows/deploy-image.yml" + - "!.github/workflows/docker-slim.yml" + - "!.github/workflows/lighthouse-badger.yml" + - "!.github/workflows/prettier.yml" + - "!lighthouse_results/**" + - "!docs/CONTRIBUTING.md" + - "!docs/CUSTOMIZE.md" + - "!docs/FAQ.md" + - "!docs/INSTALL.md" + - "!README.md" + workflow_dispatch: + +permissions: + contents: write + +jobs: + deploy: + # available images: https://github.com/actions/runner-images#available-images + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v4 + - name: Setup Ruby 💎 + uses: ruby/setup-ruby@v1 + with: + ruby-version: "3.3.5" + bundler-cache: true + - name: Setup Python 🐍 + uses: actions/setup-python@v5 + with: + python-version: "3.13" + cache: "pip" # caching pip dependencies + - name: Setup Node 🧰 + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "npm" + - name: Install JS deps 📦 + run: npm ci + - name: Update _config.yml ⚙️ + uses: fjogeleit/yaml-update-action@main + with: + commitChange: false + valueFile: "_config.yml" + propertyPath: "giscus.repo" + value: ${{ github.repository }} + - name: Install and Build 🔧 + run: | + sudo apt-get update && sudo apt-get install -y imagemagick + pip3 install --upgrade nbconvert + export JEKYLL_ENV=production + bundle exec jekyll build + - name: Purge unused CSS 🧹 + run: | + npm install -g purgecss + purgecss -c purgecss.config.js + - name: Deploy 🚀 + if: github.event_name != 'pull_request' + uses: JamesIves/github-pages-deploy-action@v4 + with: + folder: _site diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c14b3fc --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +_site +.bundle +.DS_Store +.idea +.jekyll-cache +.jekyll-metadata +.ruby-version +.sass-cache +.tweet-cache +.venv +assets/libs/ +assets/rendercv/rendercv_output/*.typ +al-folio-upgrade-report.md +node_modules/ +output/playwright/ +test-results/ +vendor + +# Python bytecode from bin/ helper scripts +__pycache__/ +*.pyc diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..7908e1e --- /dev/null +++ b/Gemfile @@ -0,0 +1,64 @@ +source 'https://rubygems.org' + +gem 'jekyll' + +# Core plugins that directly affect site building +group :jekyll_plugins do + gem 'jekyll-3rd-party-libraries' + gem 'jekyll-archives-v2' + gem 'jekyll-cache-bust' + gem 'jekyll-email-protect' + gem 'jekyll-feed' + gem 'jekyll-get-json' + gem 'jekyll-imagemagick' + gem 'jekyll-jupyter-notebook' + gem 'jekyll-link-attributes' + gem 'jekyll-minifier' + gem 'jekyll-paginate-v2' + gem 'jekyll-regex-replace' + gem 'jekyll-scholar' + gem 'jekyll-sitemap' + gem 'jekyll-socials' + gem 'jekyll-tabs' + gem 'jekyll-terser', :git => "https://github.com/RobertoJBeltran/jekyll-terser.git" + gem 'jekyll-toc' + gem 'jekyll-twitter-plugin' + gem 'jemoji' + + gem 'classifier-reborn' # used for content categorization during the build +end + +# Gems for development or external data fetching (outside :jekyll_plugins) +group :other_plugins do + gem 'css_parser' + gem 'observer' # used by jekyll-scholar + gem 'ostruct' # used by jekyll-twitter-plugin + # gem 'terser' # used by jekyll-terser + # gem 'unicode_utils' -- should be already installed by jekyll + # gem 'webrick' -- should be already installed by jekyll +end + +# Gems for al-folio plugins +group :al_folio_plugins do + gem 'al_folio_core', '= 1.0.15' + gem 'al_icons', '= 1.0.0' + gem 'al_folio_cv', '= 1.0.2' + gem 'al_folio_distill', '= 1.0.3' + gem 'al_folio_upgrade', '= 1.0.3' + gem 'al_folio_bootstrap_compat', '= 1.0.0' + gem 'al_cookie', '= 1.0.1' + + gem 'al_analytics', '= 1.0.2' + gem 'al_citations', '= 1.0.1' + gem 'al_ext_posts', '= 1.0.3' + gem 'al_img_tools', '= 1.0.3' + gem 'al_search', '= 1.0.3' + gem 'al_charts', '= 1.0.1' + gem 'al_math', '= 1.0.2' + gem 'al_comments', '= 1.0.0' + gem 'al_newsletter', '= 1.0.0' + + gem 'al_email_protect', '= 1.0.0' + gem 'al_marimo', '= 1.0.0' + gem 'al_rtl', '= 1.0.0' +end diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..ebd328c --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,551 @@ +GIT + remote: https://github.com/RobertoJBeltran/jekyll-terser.git + revision: 1085bf66d692799af09fe39f8162a1e6e42a3cc4 + specs: + jekyll-terser (0.2.3) + jekyll (>= 0.10.0) + terser (>= 1.0.0) + +GEM + remote: https://rubygems.org/ + specs: + activesupport (7.2.3.1) + base64 + benchmark (>= 0.3) + bigdecimal + concurrent-ruby (~> 1.0, >= 1.3.1) + connection_pool (>= 2.2.5) + drb + i18n (>= 1.6, < 2) + logger (>= 1.4.2) + minitest (>= 5.1, < 6) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + addressable (2.9.0) + public_suffix (>= 2.0.2, < 8.0) + al_analytics (1.0.2) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_charts (1.0.1) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_citations (1.0.1) + activesupport (>= 6.0, < 8.0) + jekyll (>= 3.9, < 5.0) + nokogiri (>= 1.13, < 2.0) + al_comments (1.0.0) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_cookie (1.0.1) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_email_protect (1.0.0) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_ext_posts (1.0.3) + feedjira (>= 3.2, < 5.0) + httparty (>= 0.18, < 1.0) + jekyll (>= 3.9, < 5.0) + nokogiri (>= 1.13, < 2.0) + al_folio_bootstrap_compat (1.0.0) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_folio_core (1.0.15) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_folio_cv (1.0.2) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_folio_distill (1.0.3) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_folio_upgrade (1.0.3) + al_folio_core (>= 1.0.0) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_icons (1.0.0) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_img_tools (1.0.3) + jekyll (>= 3.9, < 5.0) + jekyll-3rd-party-libraries (~> 0.0.1) + al_marimo (1.0.0) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_math (1.0.2) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_newsletter (1.0.0) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_rtl (1.0.0) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + al_search (1.0.3) + jekyll (>= 3.9, < 5.0) + liquid (>= 4.0, < 6.0) + base64 (0.3.0) + benchmark (0.5.0) + bibtex-ruby (6.2.0) + latex-decode (~> 0.0) + logger (~> 1.7) + racc (~> 1.7) + bigdecimal (4.1.2) + citeproc (1.1.0) + date + forwardable + json + namae (~> 1.0) + observer (< 1.0) + open-uri (< 1.0) + citeproc-ruby (2.1.8) + citeproc (~> 1.0, >= 1.0.9) + csl (~> 2.0) + observer (< 1.0) + classifier-reborn (2.3.0) + fast-stemmer (~> 1.0) + matrix (~> 0.4) + colorator (1.1.0) + concurrent-ruby (1.3.7) + connection_pool (3.0.2) + crass (1.0.7) + csl (2.2.1) + forwardable (~> 1.3) + namae (~> 1.2) + open-uri (< 1.0) + rexml (~> 3.0) + set (~> 1.1) + singleton (< 1.0) + time (< 1.0) + csl-styles (2.0.2) + csl (~> 2.0) + css_parser (1.22.0) + addressable + cssminify2 (2.1.0) + csv (3.3.5) + date (3.5.1) + deep_merge (1.2.2) + drb (2.2.3) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + eventmachine (1.2.7) + execjs (2.10.1) + fast-stemmer (1.0.2) + feedjira (4.0.2) + logger (>= 1.0, < 2) + loofah (>= 2.3.1, < 3) + sax-machine (>= 1.0, < 2) + ffi (1.17.4-aarch64-linux-gnu) + ffi (1.17.4-aarch64-linux-musl) + ffi (1.17.4-arm-linux-gnu) + ffi (1.17.4-arm-linux-musl) + ffi (1.17.4-arm64-darwin) + ffi (1.17.4-x86_64-darwin) + ffi (1.17.4-x86_64-linux-gnu) + ffi (1.17.4-x86_64-linux-musl) + forwardable (1.4.0) + forwardable-extended (2.6.0) + gemoji (4.1.0) + google-protobuf (4.35.0) + bigdecimal + rake (~> 13.3) + google-protobuf (4.35.0-aarch64-linux-gnu) + bigdecimal + rake (~> 13.3) + google-protobuf (4.35.0-aarch64-linux-musl) + bigdecimal + rake (~> 13.3) + google-protobuf (4.35.0-arm64-darwin) + bigdecimal + rake (~> 13.3) + google-protobuf (4.35.0-x86_64-darwin) + bigdecimal + rake (~> 13.3) + google-protobuf (4.35.0-x86_64-linux-gnu) + bigdecimal + rake (~> 13.3) + google-protobuf (4.35.0-x86_64-linux-musl) + bigdecimal + rake (~> 13.3) + html-pipeline (2.14.3) + activesupport (>= 2) + nokogiri (>= 1.4) + htmlcompressor (0.4.0) + http_parser.rb (0.8.1) + httparty (0.24.2) + csv + mini_mime (>= 1.0.0) + multi_xml (>= 0.5.2) + i18n (1.14.8) + concurrent-ruby (~> 1.0) + jekyll-3rd-party-libraries (0.0.1) + css_parser (>= 1.6, < 2.0) + jekyll (>= 3.6, < 5.0) + nokogiri (>= 1.8, < 2.0) + jekyll (4.4.1) + addressable (~> 2.4) + base64 (~> 0.2) + colorator (~> 1.0) + csv (~> 3.0) + em-websocket (~> 0.5) + i18n (~> 1.0) + jekyll-sass-converter (>= 2.0, < 4.0) + jekyll-watch (~> 2.0) + json (~> 2.6) + kramdown (~> 2.3, >= 2.3.1) + kramdown-parser-gfm (~> 1.0) + liquid (~> 4.0) + mercenary (~> 0.3, >= 0.3.6) + pathutil (~> 0.9) + rouge (>= 3.0, < 5.0) + safe_yaml (~> 1.0) + terminal-table (>= 1.8, < 4.0) + webrick (~> 1.7) + jekyll-archives-v2 (0.0.8) + activesupport + jekyll (>= 3.6, < 5.0) + jekyll-cache-bust (0.0.1) + jekyll (>= 3.6, < 5.0) + jekyll-email-protect (1.1.0) + jekyll-feed (0.17.0) + jekyll (>= 3.7, < 5.0) + jekyll-get-json (1.0.0) + deep_merge (~> 1.2) + jekyll (>= 3.0) + jekyll-imagemagick (1.4.0) + jekyll (>= 3.4) + jekyll-jupyter-notebook (0.0.6) + jekyll + jekyll-link-attributes (2.0.1) + jekyll-minifier (0.2.2) + cssminify2 (~> 2.1.0) + htmlcompressor (~> 0.4) + jekyll (~> 4.0) + json-minify (~> 0.0.3) + terser (~> 1.2.3) + jekyll-paginate-v2 (3.0.0) + jekyll (>= 3.0, < 5.0) + jekyll-regex-replace (1.1.0) + jekyll-sass-converter (3.1.0) + sass-embedded (~> 1.75) + jekyll-scholar (7.3.0) + bibtex-ruby (~> 6.0) + citeproc-ruby (>= 2.1.6) + csl-styles (~> 2.0) + jekyll (~> 4.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-socials (0.0.7) + jekyll (>= 3.6, < 5.0) + jekyll-tabs (1.2.1) + jekyll (>= 3.0, < 5.0) + jekyll-toc (0.19.0) + jekyll (>= 3.9) + nokogiri (~> 1.12) + jekyll-twitter-plugin (2.1.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.13.0) + gemoji (>= 3, < 5) + html-pipeline (~> 2.2) + jekyll (>= 3.0, < 5.0) + json (2.19.9) + json-minify (0.0.3) + json (> 0) + kramdown (2.5.2) + rexml (>= 3.4.4) + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + latex-decode (0.4.2) + liquid (4.0.4) + listen (3.10.0) + logger + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + logger (1.7.0) + loofah (2.25.2) + crass (~> 1.0.2) + nokogiri (>= 1.12.0) + matrix (0.4.3) + mercenary (0.4.0) + mini_mime (1.1.5) + minitest (5.27.0) + multi_xml (0.9.1) + bigdecimal (>= 3.1, < 5) + namae (1.2.0) + racc (~> 1.7) + nokogiri (1.19.4-aarch64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-aarch64-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-arm-linux-musl) + racc (~> 1.4) + nokogiri (1.19.4-arm64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-darwin) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-gnu) + racc (~> 1.4) + nokogiri (1.19.4-x86_64-linux-musl) + racc (~> 1.4) + observer (0.1.2) + open-uri (0.5.0) + stringio + time + uri + ostruct (0.6.3) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (7.0.5) + racc (1.8.1) + rake (13.4.2) + rb-fsevent (0.11.2) + rb-inotify (0.11.1) + ffi (~> 1.0) + rexml (3.4.4) + rouge (4.7.0) + safe_yaml (1.0.5) + sass-embedded (1.100.0-aarch64-linux-gnu) + google-protobuf (~> 4.31) + sass-embedded (1.100.0-aarch64-linux-musl) + google-protobuf (~> 4.31) + sass-embedded (1.100.0-arm-linux-gnueabihf) + google-protobuf (~> 4.31) + sass-embedded (1.100.0-arm-linux-musleabihf) + google-protobuf (~> 4.31) + sass-embedded (1.100.0-arm64-darwin) + google-protobuf (~> 4.31) + sass-embedded (1.100.0-x86_64-darwin) + google-protobuf (~> 4.31) + sass-embedded (1.100.0-x86_64-linux-gnu) + google-protobuf (~> 4.31) + sass-embedded (1.100.0-x86_64-linux-musl) + google-protobuf (~> 4.31) + sax-machine (1.3.2) + securerandom (0.4.1) + set (1.1.3) + singleton (0.3.0) + stringio (3.2.0) + terminal-table (3.0.2) + unicode-display_width (>= 1.1.1, < 3) + terser (1.2.7) + execjs (>= 0.3.0, < 3) + time (0.4.2) + date + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + unicode-display_width (2.6.0) + uri (1.1.1) + webrick (1.9.2) + +PLATFORMS + aarch64-linux-gnu + aarch64-linux-musl + arm-linux-gnu + arm-linux-gnueabihf + arm-linux-musl + arm-linux-musleabihf + arm64-darwin + x86_64-darwin + x86_64-linux-gnu + x86_64-linux-musl + +DEPENDENCIES + al_analytics (= 1.0.2) + al_charts (= 1.0.1) + al_citations (= 1.0.1) + al_comments (= 1.0.0) + al_cookie (= 1.0.1) + al_email_protect (= 1.0.0) + al_ext_posts (= 1.0.3) + al_folio_bootstrap_compat (= 1.0.0) + al_folio_core (= 1.0.15) + al_folio_cv (= 1.0.2) + al_folio_distill (= 1.0.3) + al_folio_upgrade (= 1.0.3) + al_icons (= 1.0.0) + al_img_tools (= 1.0.3) + al_marimo (= 1.0.0) + al_math (= 1.0.2) + al_newsletter (= 1.0.0) + al_rtl (= 1.0.0) + al_search (= 1.0.3) + classifier-reborn + css_parser + jekyll + jekyll-3rd-party-libraries + jekyll-archives-v2 + jekyll-cache-bust + jekyll-email-protect + jekyll-feed + jekyll-get-json + jekyll-imagemagick + jekyll-jupyter-notebook + jekyll-link-attributes + jekyll-minifier + jekyll-paginate-v2 + jekyll-regex-replace + jekyll-scholar + jekyll-sitemap + jekyll-socials + jekyll-tabs + jekyll-terser! + jekyll-toc + jekyll-twitter-plugin + jemoji + observer + ostruct + +CHECKSUMS + activesupport (7.2.3.1) sha256=11ebed516a43a0bb47346227a35ebae4d9427465a7c9eb197a03d5c8d283cb34 + addressable (2.9.0) sha256=7fdf6ac3660f7f4e867a0838be3f6cf722ace541dd97767fa42bc6cfa980c7af + al_analytics (1.0.2) sha256=0c8e0c029b1a28401d21ed9b56033036697e61722a0d8867f33c30010ad738d6 + al_charts (1.0.1) sha256=ce26374c2b1159ae0d65dc7999730be700a9ee486002ae14cb480eef70580885 + al_citations (1.0.1) sha256=308cfd4cd73c8dc6d24c0214f424b61606b3a393bdb899394fce80dd647cba59 + al_comments (1.0.0) sha256=1da87a29b55e4d9fd62d380200af9671f10ae4a84e3259828588498d8f3210e5 + al_cookie (1.0.1) sha256=2420241497b1fb165311ba1c9e059a9025586925b65dbba429aee225bd91a67f + al_email_protect (1.0.0) sha256=539c483657e35ee0b49197b7149df2584ee02fd2282efbf5ac190bf78bb78f26 + al_ext_posts (1.0.3) sha256=c4956d36071958d30de14f6c368863d3e4190dfe312dba08ff79aa685292420d + al_folio_bootstrap_compat (1.0.0) sha256=c210ff3087f17344dc864fa9594c737e947b23c6cae9fab3dbd37a87090b98a8 + al_folio_core (1.0.15) sha256=eee5d0afefab5d3e8747b615890d760ed0ab01a1210991118709c4e969ad1326 + al_folio_cv (1.0.2) sha256=d9b8d3624c0c707a04deaa41972fa88395fa164419bccc44e2dc2488400022fa + al_folio_distill (1.0.3) sha256=3feb669dd669effec127e1be5385158c5f98062c510980b5c9c802227ec2c247 + al_folio_upgrade (1.0.3) sha256=434ffddb27705852eae0bcaa01a8d007e0ef65472a989d1a33ae759f910f4709 + al_icons (1.0.0) sha256=7a7b6428d18e77b039aa1ae765a3faed0ae27cb646a08c1009b145c31ca5ef2d + al_img_tools (1.0.3) sha256=c50dfa206bb4459925cbfc0e7d03b326e7cb1c282200d5d110b6595f4d661cf7 + al_marimo (1.0.0) sha256=bbd8ce9650c7e8a3b35cbbde8d98eba983f132647f316b3ba2a9bd8abf502434 + al_math (1.0.2) sha256=c9fa6f3e343c0d35782d77fe386461ceff7d12186d9b51e6c92bb186b3d60781 + al_newsletter (1.0.0) sha256=27c914f5fcd0c7fac51a513ab11de7123f05de7ba834206a68ddf2588ede96d3 + al_rtl (1.0.0) sha256=dffed3cb05acf0e4f96e7ee2d51cb05fc83a428e0d5e4d697c5da4b7c3fe0f0b + al_search (1.0.3) sha256=70e846081b57a3494dd41e6bc8e1af13997200c5c28744f2449a8ebe07f79a8a + base64 (0.3.0) sha256=27337aeabad6ffae05c265c450490628ef3ebd4b67be58257393227588f5a97b + benchmark (0.5.0) sha256=465df122341aedcb81a2a24b4d3bd19b6c67c1530713fd533f3ff034e419236c + bibtex-ruby (6.2.0) sha256=d610eba78d6adf503a843daf144644449fb34e7c3f4a75e9ab67fae5dfd7c69a + bigdecimal (4.1.2) sha256=53d217666027eab4280346fba98e7d5b66baaae1b9c3c1c0ffe89d48188a3fbd + citeproc (1.1.0) sha256=278e6b8948133e82bef1c8204a1f88ca7adaa8744b9a283fe73e8f4cd0b53b95 + citeproc-ruby (2.1.8) sha256=192ce6525235adaa60d1dbc3f1b10b0839e86d98a94278736b807e234b3572e9 + classifier-reborn (2.3.0) sha256=e2236322de42b9c8d45d88a951cb0d76e210afa3bb8658b7b5802e2df41ef61c + colorator (1.1.0) sha256=e2f85daf57af47d740db2a32191d1bdfb0f6503a0dfbc8327d0c9154d5ddfc38 + concurrent-ruby (1.3.7) sha256=4412caec3a5ea2e5fdc52076724c071a81f2c0593d83b2ac8cbb8ca63b3151b0 + connection_pool (3.0.2) sha256=33fff5ba71a12d2aa26cb72b1db8bba2a1a01823559fb01d29eb74c286e62e0a + crass (1.0.7) sha256=94868719948664c89ddcaf0a37c65048413dfcb1c869470a5f7a7ceb5390b295 + csl (2.2.1) sha256=624352f1f6f51f1e0b155bd2501ce423f03264495ec259e65c26e00872a195a2 + csl-styles (2.0.2) sha256=a48007d8a60307825de140dc2adaacc0b7186f2d1042f7e839eb47fce051de98 + css_parser (1.22.0) sha256=f274988a40c6178305530d60e7deb5162f7b5538b701b61b5488fc703e5b40c1 + cssminify2 (2.1.0) sha256=406a0b95fdaab60132c6f1fbb47b4a30f9572d2ef523f806fb94a530d78c2bb1 + csv (3.3.5) sha256=6e5134ac3383ef728b7f02725d9872934f523cb40b961479f69cf3afa6c8e73f + date (3.5.1) sha256=750d06384d7b9c15d562c76291407d89e368dda4d4fff957eb94962d325a0dc0 + deep_merge (1.2.2) sha256=83ced3a3d7f95f67de958d2ce41b1874e83c8d94fe2ddbff50c8b4b82323563a + drb (2.2.3) sha256=0b00d6fdb50995fe4a45dea13663493c841112e4068656854646f418fda13373 + em-websocket (0.5.3) sha256=f56a92bde4e6cb879256d58ee31f124181f68f8887bd14d53d5d9a292758c6a8 + eventmachine (1.2.7) sha256=994016e42aa041477ba9cff45cbe50de2047f25dd418eba003e84f0d16560972 + execjs (2.10.1) sha256=abe0ae028467eb8e30c10814eb934d07876a691aae7e803d813b7ce5a75e73f1 + fast-stemmer (1.0.2) sha256=d0aa9fd9cfbca836a09d8abb122552ac8234130271a3b0da1cb077323d650819 + feedjira (4.0.2) sha256=3e7a90d24fd66eddc809539e637a86a02de1a7e038cd40157e916ed2f3b5ff71 + ffi (1.17.4-aarch64-linux-gnu) sha256=b208f06f91ffd8f5e1193da3cae3d2ccfc27fc36fba577baf698d26d91c080df + ffi (1.17.4-aarch64-linux-musl) sha256=9286b7a615f2676245283aef0a0a3b475ae3aae2bb5448baace630bb77b91f39 + ffi (1.17.4-arm-linux-gnu) sha256=d6dbddf7cb77bf955411af5f187a65b8cd378cb003c15c05697f5feee1cb1564 + ffi (1.17.4-arm-linux-musl) sha256=9d4838ded0465bef6e2426935f6bcc93134b6616785a84ffd2a3d82bc3cf6f95 + ffi (1.17.4-arm64-darwin) sha256=19071aaf1419251b0a46852abf960e77330a3b334d13a4ab51d58b31a937001b + ffi (1.17.4-x86_64-darwin) sha256=aa70390523cf3235096cf64962b709b4cfbd5c082a2cb2ae714eb0fe2ccda496 + ffi (1.17.4-x86_64-linux-gnu) sha256=9d3db14c2eae074b382fa9c083fe95aec6e0a1451da249eab096c34002bc752d + ffi (1.17.4-x86_64-linux-musl) sha256=3fdf9888483de005f8ef8d1cf2d3b20d86626af206cbf780f6a6a12439a9c49e + forwardable (1.4.0) sha256=f1cd40cc9812937980e1c76f1aa053660990a7c9b6a98fc37d945468afcce838 + forwardable-extended (2.6.0) sha256=1bec948c469bbddfadeb3bd90eb8c85f6e627a412a3e852acfd7eaedbac3ec97 + gemoji (4.1.0) sha256=734434020cbe964ea9d19086798797a47d23a170892de0ce55b74aa65d2ddc1a + google-protobuf (4.35.0) sha256=95346162c792ed78c9a28cbf2d937a53f706de6df36a27471582f63f03c30c0d + google-protobuf (4.35.0-aarch64-linux-gnu) sha256=2cabd61b420918aec1564f9f7414e455bf922d20c5f8139d62783df5558a7aea + google-protobuf (4.35.0-aarch64-linux-musl) sha256=f6b11f3420a4564f68e8233c95eac6924f6a727dfc2f81a56af2e09add551501 + google-protobuf (4.35.0-arm64-darwin) sha256=66ab26d3fc82b8950702e53ab16c198e3c0ea3f2a38aaaf1f32152da45593ac5 + google-protobuf (4.35.0-x86_64-darwin) sha256=05eb5c8bc9899135befff496fc0a3642e7ff3d0943f043841dcc456f5654fea0 + google-protobuf (4.35.0-x86_64-linux-gnu) sha256=999226f3b00cd9fddb1b26851d16060212fa1d90c406aaad47e574682b716059 + google-protobuf (4.35.0-x86_64-linux-musl) sha256=be0218520d77b2aee898b363514b03819f6f63f9c041ae0d0d79b4ce5247bffd + html-pipeline (2.14.3) sha256=8a1d4d7128b2141913387cac0f8ba898bb6812557001acc0c2b46910f59413a0 + htmlcompressor (0.4.0) sha256=4630cf8ed46b563f0b49cc6028a3fe8c17a9067f2becd7c3a2aa5aaacefb1f9e + http_parser.rb (0.8.1) sha256=9ae8df145b39aa5398b2f90090d651c67bd8e2ebfe4507c966579f641e11097a + httparty (0.24.2) sha256=8fca6a54aa0c4aa4303a0fd33e5e2156175d6a5334f714263b458abd7fda9c38 + i18n (1.14.8) sha256=285778639134865c5e0f6269e0b818256017e8cde89993fdfcbfb64d088824a5 + jekyll (4.4.1) sha256=4c1144d857a5b2b80d45b8cf5138289579a9f8136aadfa6dd684b31fe2bc18c1 + jekyll-3rd-party-libraries (0.0.1) sha256=331f8d53adbb532a27705d9d4fb719c7f306247c56531fa22c0178f4a445a692 + jekyll-archives-v2 (0.0.8) sha256=5584088b4bd188a6099a2f6940c223f037ddb30e70890fcca1da299395584a7d + jekyll-cache-bust (0.0.1) sha256=538ffe6d48f56d933b435bf32d4fef19ff1082cae7d6d8bc737fc13a9c86ba8c + jekyll-email-protect (1.1.0) sha256=00d620939c710788ae3f71188ef913e0aa7ff0a5a39f48249213ea6215558c8d + jekyll-feed (0.17.0) sha256=689aab16c877949bb9e7a5c436de6278318a51ecb974792232fd94d8b3acfcc3 + jekyll-get-json (1.0.0) sha256=f6b076a93de9cace89a88617b494bea10e6dbb86331c293d663d37d9b9ae7522 + jekyll-imagemagick (1.4.0) sha256=dcf4ae46ffbeabfac584a5256821e39fc5fae8d651fd5c4a56fef3a2061a7ef4 + jekyll-jupyter-notebook (0.0.6) sha256=33f757eaad9035bebc5309e23ce2274db089ae8a0d002a53c3acbc5265d322cd + jekyll-link-attributes (2.0.1) sha256=e25b12e3c2a2960c8cfd9ab33e8df9aa3c4ba86491dbeec48f3cb11b0a0f216d + jekyll-minifier (0.2.2) sha256=f0a182b98b369492b9d93f1dd064223cf04a10ba31c49e1535f28fe35764ee19 + jekyll-paginate-v2 (3.0.0) sha256=001be6c1963caa41fed9c2f43b0d47201defa0395381eb8830487c1c2fc4f4e3 + jekyll-regex-replace (1.1.0) sha256=3738e6a0aa07dd3f9b7369e6e38e5d245c623bbd70c31b21e7838c654377a00c + jekyll-sass-converter (3.1.0) sha256=83925d84f1d134410c11d0c6643b0093e82e3a3cf127e90757a85294a3862443 + jekyll-scholar (7.3.0) sha256=d912e60aa5ab342fb4322772f02674152e2799375612a2aa5f9b2228728fd09b + jekyll-sitemap (1.4.0) sha256=0de08c5debc185ea5a8f980e1025c7cd3f8e0c35c8b6ef592f15c46235cf4218 + jekyll-socials (0.0.7) sha256=813448f79182fa5aa05a87e2b7cfec3d9a55660a323f082e249a47a84f2a7518 + jekyll-tabs (1.2.1) sha256=e7e0f05d1180c9651318fb5834a0c745a613b4253e9699a662b63cc3d39cbc4d + jekyll-terser (0.2.3) + jekyll-toc (0.19.0) sha256=8a8270f7e8e3d849e2035710b1713d0af5e2185a4bfaca70f9192ecf5ac50668 + jekyll-twitter-plugin (2.1.0) sha256=d25ee86813705244dcec3163d9a110a1c0216e157dcf6cf88ab57cf389887acd + jekyll-watch (2.2.1) sha256=bc44ed43f5e0a552836245a54dbff3ea7421ecc2856707e8a1ee203a8387a7e1 + jemoji (0.13.0) sha256=5d4c3e8e2cbbb2b73997c31294f6f70c94e4d4fade039373e86835bcf5529e7c + json (2.19.9) sha256=9b9025b7cdddafa38d316eca0b2358488e42d417045c1b90d216a9fefe46b79a + json-minify (0.0.3) sha256=fd38ef93867332c2340aaf1b57335782ab5958fe6fb3ca7a8aba1469f0bf08ae + kramdown (2.5.2) sha256=1ba542204c66b6f9111ff00dcc26075b95b220b07f2905d8261740c82f7f02fa + kramdown-parser-gfm (1.1.0) sha256=fb39745516427d2988543bf01fc4cf0ab1149476382393e0e9c48592f6581729 + latex-decode (0.4.2) sha256=e85633406e315e348e0ca6de231dee1bf45a22496b0866059c635f7502c2a592 + liquid (4.0.4) sha256=4fcfebb1a045e47918388dbb7a0925e7c3893e58d2bd6c3b3c73ec17a2d8fdb3 + listen (3.10.0) sha256=c6e182db62143aeccc2e1960033bebe7445309c7272061979bb098d03760c9d2 + logger (1.7.0) sha256=196edec7cc44b66cfb40f9755ce11b392f21f7967696af15d274dde7edff0203 + loofah (2.25.2) sha256=2007f746959ac65552456e04b433e83deb22759ab38c838b4445c70e43425918 + matrix (0.4.3) sha256=a0d5ab7ddcc1973ff690ab361b67f359acbb16958d1dc072b8b956a286564c5b + mercenary (0.4.0) sha256=b25a1e4a59adca88665e08e24acf0af30da5b5d859f7d8f38fba52c28f405138 + mini_mime (1.1.5) sha256=8681b7e2e4215f2a159f9400b5816d85e9d8c6c6b491e96a12797e798f8bccef + minitest (5.27.0) sha256=2d3b17f8a36fe7801c1adcffdbc38233b938eb0b4966e97a6739055a45fa77d5 + multi_xml (0.9.1) sha256=7ce766b59c17241ed62976caeae1fae9b2431b263398c35396239a68c4a64e57 + namae (1.2.0) sha256=3541ce4b086fd4981d2376630c03e284402bfe1cdbab4e50e2222a72aeb9d59d + nokogiri (1.19.4-aarch64-linux-gnu) sha256=1269fb644a6de405057a53dd5c762b1209b43ca7424f839454d3dbc677c31a8f + nokogiri (1.19.4-aarch64-linux-musl) sha256=35c65b9ce72b3bb03207bdbe7067915019dc18c1b9b59139684bd6690fdd01af + nokogiri (1.19.4-arm-linux-gnu) sha256=a301313e38bb065d68239e79734bcd6f56fb6efaacebde29e9abf2a4735340ca + nokogiri (1.19.4-arm-linux-musl) sha256=588923c101bcfa78869734d247d25b598674323e7f22474fc468f6e5647311eb + nokogiri (1.19.4-arm64-darwin) sha256=a46db9853286e6597b36ebc6953817d15acf3a299583eb3f89fdc6f91dd63527 + nokogiri (1.19.4-x86_64-darwin) sha256=7fd17057d3e1f00e9954a74b3cd76595d3d4a5ef233b7ed9599047c204f70551 + nokogiri (1.19.4-x86_64-linux-gnu) sha256=379fae440b28915e3f19d752ce2dcf8465ed2b2fbefd2a7ca0dd497bc981a06a + nokogiri (1.19.4-x86_64-linux-musl) sha256=17dfb7c1fa194ae02fbf7c51a7afc8d278045ab3fdacfd86f91d02d7b274470b + observer (0.1.2) sha256=d8a3107131ba661138d748e7be3dbafc0d82e732fffba9fccb3d7829880950ac + open-uri (0.5.0) sha256=7b4f06fdac39e6946aed15a8da82531580882fbbec80438adcb7c30d388887ca + ostruct (0.6.3) sha256=95a2ed4a4bd1d190784e666b47b2d3f078e4a9efda2fccf18f84ddc6538ed912 + pathutil (0.16.2) sha256=e43b74365631cab4f6d5e4228f812927efc9cb2c71e62976edcb252ee948d589 + public_suffix (7.0.5) sha256=1a8bb08f1bbea19228d3bed6e5ed908d1cb4f7c2726d18bd9cadf60bc676f623 + racc (1.8.1) sha256=4a7f6929691dbec8b5209a0b373bc2614882b55fc5d2e447a21aaa691303d62f + rake (13.4.2) sha256=cb825b2bd5f1f8e91ca37bddb4b9aaf345551b4731da62949be002fa89283701 + rb-fsevent (0.11.2) sha256=43900b972e7301d6570f64b850a5aa67833ee7d87b458ee92805d56b7318aefe + rb-inotify (0.11.1) sha256=a0a700441239b0ff18eb65e3866236cd78613d6b9f78fea1f9ac47a85e47be6e + rexml (3.4.4) sha256=19e0a2c3425dfbf2d4fc1189747bdb2f849b6c5e74180401b15734bc97b5d142 + rouge (4.7.0) sha256=dba5896715c0325c362e895460a6d350803dbf6427454f49a47500f3193ea739 + safe_yaml (1.0.5) sha256=a6ac2d64b7eb027bdeeca1851fe7e7af0d668e133e8a88066a0c6f7087d9f848 + sass-embedded (1.100.0-aarch64-linux-gnu) sha256=c13187f8eaae7e7e64246b18eb896534a84465a17198829ef65730db4662860e + sass-embedded (1.100.0-aarch64-linux-musl) sha256=1b0945a66cd4e40f505db73b1e790e2561e07e6d9fd04ef6ebbf279835666b3f + sass-embedded (1.100.0-arm-linux-gnueabihf) sha256=a2de272bb02977ea91acaf3fecb6d8e09e4989501efbfc5375da4b5e7bff001d + sass-embedded (1.100.0-arm-linux-musleabihf) sha256=ce19837c10bab5ae6785f10b435a57a64ca027a99875cd701dc6fd3af317cbe5 + sass-embedded (1.100.0-arm64-darwin) sha256=d294b32c3b7bed293ad39bd392713c07f1df5454e65fa0f8d80dadbdba8a0cf4 + sass-embedded (1.100.0-x86_64-darwin) sha256=3db80c837a60712de3461d5aa1be43c7056a0584d7182a8ae7a8996d64ab46d3 + sass-embedded (1.100.0-x86_64-linux-gnu) sha256=58dd0a8a4f0dd78881b90d8b0e4d0eed042d54865b19b71384d91091ade93e18 + sass-embedded (1.100.0-x86_64-linux-musl) sha256=03dbee81bf93e770c725caf0c895e04c7b049ebef56b8a7002fcf21e6bedf7c5 + sax-machine (1.3.2) sha256=a1112678039eea4c402827ca0d377744e0f882fd6386f29f7b0023d938750d3a + securerandom (0.4.1) sha256=cc5193d414a4341b6e225f0cb4446aceca8e50d5e1888743fac16987638ea0b1 + set (1.1.3) sha256=12bbbd31c8b177d55ac0314bcc7f4c473276b06e8a2dcfdc14326e73ce7769ce + singleton (0.3.0) sha256=83ea1bca5f4aa34d00305ab842a7862ea5a8a11c73d362cb52379d94e9615778 + stringio (3.2.0) sha256=c37cb2e58b4ffbd33fe5cd948c05934af997b36e0b6ca6fdf43afa234cf222e1 + terminal-table (3.0.2) sha256=f951b6af5f3e00203fb290a669e0a85c5dd5b051b3b023392ccfd67ba5abae91 + terser (1.2.7) sha256=1b12eb49769dadac44caac3485b38928ff4ab435f1bbbacfe8048cff84c6aa1b + time (0.4.2) sha256=f324e498c3bde9471d45a7d18f874c27980e9867aa5cfca61bebf52262bc3dab + tzinfo (2.0.6) sha256=8daf828cc77bcf7d63b0e3bdb6caa47e2272dcfaf4fbfe46f8c3a9df087a829b + unicode-display_width (2.6.0) sha256=12279874bba6d5e4d2728cef814b19197dbb10d7a7837a869bab65da943b7f5a + uri (1.1.1) sha256=379fa58d27ffb1387eaada68c749d1426738bd0f654d812fcc07e7568f5c57c6 + webrick (1.9.2) sha256=beb4a15fc474defed24a3bda4ffd88a490d517c9e4e6118c3edce59e45864131 + +BUNDLED WITH + 4.0.6 diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..368a8aa --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2025 Maruan Al-Shedivat. + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/_bibliography/papers.bib b/_bibliography/papers.bib new file mode 100644 index 0000000..532c2b9 --- /dev/null +++ b/_bibliography/papers.bib @@ -0,0 +1,27 @@ +--- +--- + +@techreport{ballesteros2026agi, + bibtex_show = {true}, + selected = {true}, + title = {Slowing the Race Toward AGI: International Coordination and Domestic Measures to Reduce Catastrophic Risk}, + author = {Ballesteros-Cobián, Jay}, + institution = {Existential Risk Laboratory (XLab), University of Chicago}, + year = {2026}, + month = {June}, + pdf = {policy-memo_ENG.pdf}, + abstract = {Written as part of the AI Policy Fundamentals study group at UChicago's Existential Risk Laboratory (XLab). Frames AI safety as a collective action problem, where commercial and geopolitical competition pushes firms and governments to prioritize speed of deployment over the safety of their models. Drawing on recent work in economics and AI governance, the brief argues that regulation is one of the few mechanisms that can shift those incentives toward reducing catastrophic risk. The recommendations work across two complementary levels: a binding international agreement as a long-term goal, anchored on verifiable compute thresholds and chip tracking, and domestic measures (model transparency and evaluation, compute nonproliferation, and slowdown commitments) that can reduce risk in the near term while building the technical groundwork for such an agreement.}, + additional_info = {. Also available in [Spanish](/assets/pdf/policy-memo_ES.pdf)} +} + +@techreport{ballesteros2024dermatitis, + bibtex_show = {true}, + title = {Atopic Dermatitis: Beyond the Skin. Impact on Quality of Life in México}, + author = {Ballesteros-Cobián, Jay}, + institution = {Fundación IDEA}, + year = {2024}, + month = {May}, + html = {https://fundacionidea.org.mx/publication_detail/84}, + abstract = {Co-authored during my time as a Senior Analyst at Fundación IDEA. Examines the multifaceted impact of atopic dermatitis in Mexico on patients' quality of life, including physical discomfort, psychological effects, and social implications, as well as the disease's economic burden (direct medical and indirect costs). My responsibilities included designing the methodology and survey instruments, conducting interviews and data collection, and performing descriptive statistical analysis and data visualization (in Python).}, + additional_info = {. [English executive summary](https://fundacionidea.org.mx/storage/IDEA/files/mxSAN005_DA_two%20pager%20ENG_%20250509.pdf)} +} diff --git a/_config.yml b/_config.yml index 9a13cc7..34ab4e7 100644 --- a/_config.yml +++ b/_config.yml @@ -1,12 +1,675 @@ -theme: jekyll-theme-minimal -minimal_mistakes_skin: "contrast" -title: Jay Ballesteros-Cobián -description: +# ----------------------------------------------------------------------------- +# Site settings +# ----------------------------------------------------------------------------- + +title: blank # the website title (if blank, full name will be used instead) +first_name: Jay +middle_name: +last_name: Ballesteros-Cobián +contact_note: > +description: > # the ">" symbol means to ignore newlines until "footer_text:" + Personal site of Jay Ballesteros-Cobián — MPP candidate at the University of Chicago Harris School, working on causal inference, technology governance, and development policy. +footer_text: > + al-folio theme. +keywords: jekyll, jekyll-theme, academic-website, portfolio-website # add your own keywords or leave empty +lang: en # the language of your site (for example: en, fr, cn, ru, etc.) +icon: favicon.png # the emoji used as the favicon (alternatively, provide image name in /assets/img/) +apple_touch_icon: # image name in /assets/img/ (or a rooted path / absolute URL) used for iOS home-screen bookmarks; needs a real 180x180 PNG, since Safari ignores the emoji favicon above. Left empty, iOS falls back to a screenshot of the page. + +url: https://jballesterosc.github.io # the base hostname & protocol for your site +baseurl: # the subpath of your site, e.g. /blog/. Leave blank for root +last_updated: false # set to true if you want to display last updated in the footer +impressum_path: # set to path to include impressum link in the footer, use the same path as permalink in a page, helps to conform with EU GDPR +back_to_top: true # set to false to disable the back to top button + +# ----------------------------------------------------------------------------- +# Theme +# ----------------------------------------------------------------------------- + +# repo color theme +repo_theme_light: default # https://github.com/stats-organization/github-stats-extended/blob/master/packages/core/src/themes/README.md +repo_theme_dark: dark # https://github.com/stats-organization/github-stats-extended/blob/master/packages/core/src/themes/README.md +# Off by default: addresses are then split at build time so the HTML contains no +# `user@host` and no `mailto:` for harvesters to scrape, and clicking one copies +# it to the clipboard instead of opening a mail client. +# See "Protecting email addresses from scrapers" in docs/CUSTOMIZE.md. +protect_email: false + +# Off by default: the free public github-profile-trophy instance is disabled +# (its Vercel deployment answers HTTP 402 / DEPLOYMENT_DISABLED), so every trophy +# image 404s. The project itself is still open source and free — self-host it and +# point external_services.github_profile_trophy_url at your instance, then set +# enabled: true. See docs/CUSTOMIZE.md. +repo_trophies: + enabled: false + theme_light: flat # https://github.com/ryo-ma/github-profile-trophy + theme_dark: gitdimmed # https://github.com/ryo-ma/github-profile-trophy + +# External service URLs for repository page +# To use a different instance or service for displaying GitHub stats and trophies, +# update these URLs. These are used in the repository templates. +external_services: + github_readme_stats_url: https://github-stats-extended.vercel.app + github_profile_trophy_url: https://github-profile-trophy.vercel.app + +# ----------------------------------------------------------------------------- +# al-folio API (v1.x) +# ----------------------------------------------------------------------------- + +al_folio: + api_version: 1 + style_engine: tailwind + tailwind: + version: 4.1.18 + preflight: false + css_entry: assets/tailwind/app.css + distill: + engine: distillpub-template + source: al-org-dev/distill-template#al-folio + allow_remote_loader: false + features: + cv: + enabled: true + distill: + enabled: true + compat: + bootstrap: + enabled: false + support_window: v1.0-v1.2 + deprecates_in: v1.3 + removed_in: v2.0 + upgrade: + channel: stable + auto_apply_safe_fixes: false + +# ----------------------------------------------------------------------------- +# RSS Feed +# ----------------------------------------------------------------------------- +# will use title and url fields +# Take a look to https://github.com/jekyll/jekyll-feed for more customization + +# ----------------------------------------------------------------------------- +# Layout +# ----------------------------------------------------------------------------- + +navbar_fixed: true +footer_fixed: true +search_enabled: true +socials_in_search: true +posts_in_search: true +bib_search: true + +# Dimensions +max_width: 930px + +# ----------------------------------------------------------------------------- +# Open Graph & Schema.org +# ----------------------------------------------------------------------------- +# Display links to the page with a preview object on social media. +# see https://schema.org/docs/faq.html for more information +serve_og_meta: false # Include Open Graph meta tags in the HTML head +serve_schema_org: false # Include Schema.org in the HTML head +og_image: # The site-wide (default for all links) Open Graph preview image + +# ----------------------------------------------------------------------------- +# Analytics and search engine verification +# ----------------------------------------------------------------------------- + +analytics: + # For Google Analytics, see https://support.google.com/analytics/answer/10447272?hl=en&ref_topic=14088998&sjid=5129943941510317771-SA#zippy=%2Cgoogle-sites + # and follow the instructions for Google Sites. You will need to create a Google Analytics property and copy the Google tag ID. + google: # your Google Analytics measurement ID (format: G-XXXXXXXXXX) + cronitor: # cronitor RUM analytics site ID (format: XXXXXXXXX) + pirsch: # your Pirsch analytics site ID (length 32 characters) + openpanel: # your Openpanel analytics client ID (format: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX) + cloudflare: # your Cloudflare Web Analytics beacon token (32 hex characters) +enable_simple_analytics: false # Simple Analytics identifies a site by its domain, so it has no ID to set above + +# For Google Search Console, see https://support.google.com/webmasters/answer/9008080?hl=en#meta_tag_verification&zippy=%2Chtml-tag +google_site_verification: # your google-site-verification ID (Google Search Console) +bing_site_verification: # out your bing-site-verification ID (Bing Webmaster) + +# ----------------------------------------------------------------------------- +# Blog +# ----------------------------------------------------------------------------- + +blog_name: writing # blog_name will be displayed in your blog page +blog_description: notes on policy, data, and whatever else I'm thinking about +permalink: /writing/:year/:title/ +lsi: false # produce an index for related posts + +# Pagination +pagination: + enabled: true + +related_blog_posts: + enabled: true + max_related: 5 + +# Giscus comments (RECOMMENDED) +# Follow instructions on https://giscus.app/ to setup for your repo to fill out the information below. +giscus: + repo: # / + repo_id: # leave empty or specify your repo_id (see https://giscus.app/) + category: Comments # name of the category under which discussions will be created + category_id: # leave empty or specify your category_id (see https://giscus.app/) + mapping: title # identify discussions by post title + strict: 1 # use strict identification mode + reactions_enabled: 1 # enable (1) or disable (0) emoji reactions + input_position: bottom # whether to display input form below (bottom) or above (top) the comments + dark_theme: dark # name of the dark color scheme (preferred works well with al-folio dark mode) + light_theme: light # name of the light color scheme (preferred works well with al-folio light mode) + emit_metadata: 0 + lang: en + +# Disqus comments (DEPRECATED) +disqus_shortname: # put your disqus shortname +# https://help.disqus.com/en/articles/1717111-what-s-a-shortname + +# External sources. +# If you have blog posts published on medium.com or other external sources, +# you can display them in your blog by adding a link to the RSS feed. +# Optional: Set default categories and tags for posts from each source. +external_sources: + +# ----------------------------------------------------------------------------- +# Newsletter +# ----------------------------------------------------------------------------- + +newsletter: + enabled: false + endpoint: # your loops endpoint (e.g., https://app.loops.so/api/newsletter-form/YOUR-ENDPOINT) + # https://loops.so/docs/forms/custom-form + +# ----------------------------------------------------------------------------- +# Collections +# ----------------------------------------------------------------------------- + +collections: + projects: + output: true + +# ----------------------------------------------------------------------------- +# Jekyll settings +# ----------------------------------------------------------------------------- + +# Markdown and syntax highlight markdown: kramdown +highlighter: rouge +kramdown: + input: GFM + syntax_highlighter_opts: + css_class: "highlight" + span: + line_numbers: false + block: + line_numbers: false + start_line: 1 + +# Includes & excludes +include: ["_pages"] +exclude: + - AGENTS.md + - al-folio-upgrade-report.md + - bin/ + - CLAUDE.md + - Dockerfile + - docker-compose.yml + - docker-compose-slim.yml + - docs/ + - Gemfile + - Gemfile.lock + - LICENSE + - lighthouse_results/ + - package.json + - package-lock.json + - _pages/about_einstein.md + - purgecss.config.js + - README.md + - readme_preview/ + - gems/ + - migrations/ + - vendor +keep_files: + - CNAME + - .nojekyll + +# Use al_folio_core as the theme runtime; local files can still override theme files. +theme: al_folio_core + +# Plug-ins plugins: - - jekyll-multiple-languages-plugin + - jekyll-3rd-party-libraries + - jekyll-archives-v2 + - jekyll-cache-bust + - jekyll-email-protect + - jekyll-feed + - jekyll-get-json + - jekyll-imagemagick + - jekyll-jupyter-notebook + - jekyll-link-attributes + - jekyll-minifier + - jekyll-paginate-v2 + - jekyll-regex-replace + - jekyll/scholar + - jekyll-sitemap + - jekyll-socials + - jekyll-tabs + - jekyll-terser + - jekyll-toc + - jekyll-twitter-plugin - jemoji -show_downloads: false -github: - is_project_page: true - languages: ["sp", "en"] \ No newline at end of file + + # al-folio plugins + - al_folio_core + - al_icons + - al_folio_cv + - al_folio_distill + - al_folio_upgrade + - al_folio_bootstrap_compat + - al_cookie + - al_analytics + - al_citations + - al_ext_posts + - al_img_tools + - al_search + - al_charts + - al_math + - al_comments + - al_newsletter + - al_email_protect + - al_marimo + - al_rtl + +# Sitemap settings +defaults: + - scope: + path: "assets" + values: + sitemap: false + +sass: + style: compressed + +# ----------------------------------------------------------------------------- +# Jekyll Minifier +# ----------------------------------------------------------------------------- + +jekyll-minifier: + compress_javascript: false # set to false since we are using terser as the js minifier + # CSS is already minified upstream (Tailwind build ships tailwind.css; main.scss is compiled + # with sass `style: compressed`). Re-minifying via cssminify2 mangles Tailwind v4 spacing + # tokens inside calc(), turning `var(--spacing)` into the invalid `var( - - spacing)` and + # breaking every spacing/positioning utility (e.g. .fixed-top -> broken navbar). Disable it. + compress_css: false + # JS minification is delegated to jekyll-terser (compress_javascript above is false). + exclude: ["robots.txt"] + +# ----------------------------------------------------------------------------- +# Terser +# ----------------------------------------------------------------------------- + +terser: + compress: + drop_console: true + +# ----------------------------------------------------------------------------- +# Jekyll Archives +# ----------------------------------------------------------------------------- + +jekyll-archives: + posts: + enabled: [year, tags, categories] # enables year, tag and category archives (remove if you need to disable one of them). + permalinks: + year: "/writing/:year/" + tags: "/writing/:type/:name/" + categories: "/writing/:type/:name/" + +display_tags: [] # these tags will be displayed on the front page of your blog +display_categories: [] # these categories will be displayed on the front page of your blog + +# ----------------------------------------------------------------------------- +# Jekyll Scholar +# ----------------------------------------------------------------------------- + +scholar: + last_name: [Ballesteros-Cobián, "Ballesteros-Cobian"] + first_name: [Jay] + + style: apa + locale: en + + source: /_bibliography/ + bibliography: papers.bib + bibliography_template: bib + # Note: if you have latex math in your bibtex, the latex filter + # preprocessing may conflict with MathJAX if the latter is enabled. + # See https://github.com/alshedivat/al-folio/issues/357. + bibtex_filters: [latex, smallcaps, superscript] + + replace_strings: true + join_strings: true + + details_dir: bibliography + details_link: Details + + query: "@*" + group_by: year + group_order: descending + +# Display different badges withs stats for your publications +# Customize badge behavior in _layouts/bib.liquid +enable_publication_badges: + altmetric: true # Altmetric badge (Customization options: https://badge-docs.altmetric.com/index.html) + dimensions: true # Dimensions badge (Customization options: https://badge.dimensions.ai/) + google_scholar: true # Google Scholar badge (https://scholar.google.com/intl/en/scholar/citations.html) + inspirehep: true # Inspire HEP badge (https://help.inspirehep.net/knowledge-base/citation-metrics/) + +# Filter out certain bibtex entry keywords used internally from the bib output +filtered_bibtex_keywords: + [ + abbr, + abstract, + additional_info, + altmetric, + annotation, + arxiv, + award, + award_name, + bibtex_show, + blog, + code, + dimensions, + eprint, + google_scholar_id, + hal, + html, + inspirehep_id, + pdf, + pmid, + poster, + preview, + selected, + slides, + supp, + video, + website, + ] + +# Maximum number of authors to be shown for each publication (more authors are visible on click) +max_author_limit: 3 # leave blank to always show all authors +more_authors_animation_delay: 10 # more authors are revealed on click using animation; smaller delay means faster animation + +# Enables publication thumbnails. If disabled, none of the publications will display thumbnails, even if specified in the bib entry. +enable_publication_thumbnails: false + +# ----------------------------------------------------------------------------- +# Jekyll Link Attributes +# ----------------------------------------------------------------------------- + +# These are the defaults +external_links: + enabled: true + rel: external nofollow noopener + target: _blank + exclude: + +# ----------------------------------------------------------------------------- +# Responsive WebP Images +# ----------------------------------------------------------------------------- + +# MAKE SURE imagemagick is installed and on your PATH before enabling imagemagick. In a terminal, run: +# convert -version +imagemagick: + enabled: true # enables responsive images for your site (recommended, see https://github.com/alshedivat/al-folio/issues/537) + widths: + - 480 + - 800 + - 1400 + input_directories: + - assets/img/ + input_formats: + - ".jpg" + - ".jpeg" + - ".png" + - ".tiff" + - ".gif" + output_formats: + webp: "-auto-orient -quality 85" + +# Lazy loading images +# If you enable lazy loading, all images will add the loading="lazy" attribute. +# This will make your site load faster, but it may not be supported in all browsers. +# You can also set loading="" to other values for specific images to override the default behavior. +# Options: "auto", "eager", "lazy" +# See https://web.dev/browser-level-image-lazy-loading/ for more information. +lazy_loading_images: true # enables lazy loading of images (recommended) + +# ----------------------------------------------------------------------------- +# Optional Features +# ----------------------------------------------------------------------------- + +enable_google_verification: false # enables google site verification +enable_bing_verification: false # enables bing site verification +enable_cookie_consent: false # enables GDPR-compliant cookie consent dialog (https://github.com/orestbida/cookieconsent) +enable_masonry: true # enables automatic project cards arrangement +enable_math: true # enables math typesetting (uses MathJax) +enable_tooltips: false # enables automatic tooltip links generated for each section titles on pages and posts +enable_darkmode: true # enables switching between light/dark modes +enable_navbar_social: false # enables displaying social links in the navbar on the about page +enable_project_categories: false # enables categorization of projects into multiple categories +enable_medium_zoom: true # enables image zoom feature (as on medium.com) +enable_progressbar: true # enables a horizontal progress bar linked to the vertical scroll position +enable_video_embedding: false # enables video embedding for bibtex entries. If false, the button opens the video link in a new window. + +# ----------------------------------------------------------------------------- +# Library versions +# ----------------------------------------------------------------------------- + +# Add the url, version and integrity hash of the libraries you use in your site. +# The integrity hash is used to ensure that the library is not tampered with. +# Integrity hashes not provided by the libraries were generated using https://www.srihash.org/ +third_party_libraries: + download: false # if true, download the versions of the libraries specified below and use the downloaded files + bootstrap-table: + integrity: + css: "sha256-uRX+PiRTR4ysKFRCykT8HLuRCub26LgXJZym3Yeom1c=" + js: "sha256-4rppopQE9POKfukn2kEvhJ9Um25Cf6+IDVkARD0xh78=" + url: + css: "https://cdn.jsdelivr.net/npm/bootstrap-table@{{version}}/dist/bootstrap-table.min.css" + js: "https://cdn.jsdelivr.net/npm/bootstrap-table@{{version}}/dist/bootstrap-table.min.js" + version: "1.22.4" + fontawesome: + integrity: + css: "sha256-MVopmdyC2tYTiJ8wlktf0uh0v4NgT+vNdyVFepi7Q0c=" + url: + css: "https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@{{version}}/css/all.min.css" + version: "7.2.0" + academicons: + integrity: + css: "sha256-SzrCOBJbGVFMahewkgjwnApaV2+av1DwMAA+/QGLyZw=" + url: + css: "https://cdn.jsdelivr.net/npm/academicons@{{version}}/css/academicons.min.css" + version: "1.9.5" + chartjs: + integrity: + js: "sha256-0q+JdOlScWOHcunpUk21uab1jW7C1deBQARHtKMcaB4=" + url: + js: "https://cdn.jsdelivr.net/npm/chart.js@{{version}}/dist/chart.umd.min.js" + version: "4.4.1" + d3: + integrity: + js: "sha256-1rA678n2xEx7x4cTZ5x4wpUCj6kUMZEZ5cxLSVSFWxw=" + url: + js: "https://cdn.jsdelivr.net/npm/d3@{{version}}/dist/d3.min.js" + version: "7.8.5" + diff2html: + integrity: + css: "sha256-IMBK4VNZp0ivwefSn51bswdsrhk0HoMTLc2GqFHFBXg=" + js: "sha256-eU2TVHX633T1o/bTQp6iIJByYJEtZThhF9bKz/DcbbY=" + url: + css: "https://cdn.jsdelivr.net/npm/diff2html@{{version}}/bundles/css/diff2html.min.css" + js: "https://cdn.jsdelivr.net/npm/diff2html@{{version}}/bundles/js/diff2html-ui.min.js" + version: "3.4.47" + echarts: + integrity: + js: + library: "sha256-QvgynZibb2U53SsVu98NggJXYqwRL7tg3FeyfXvPOUY=" + dark_theme: "sha256-sm6Ui9w41++ZCWmIWDLC18a6ki72FQpWDiYTDxEPXwU=" + url: + js: + library: "https://cdn.jsdelivr.net/npm/echarts@{{version}}/dist/echarts.min.js" + dark_theme: "https://cdn.jsdelivr.net/npm/echarts@{{version}}/theme/dark-fresh-cut.js" + version: "5.5.0" + google_fonts: + url: + fonts: "https://fonts.googleapis.com/css?family=Roboto:300,400,500,700|Roboto+Slab:100,300,400,500,700|Material+Icons&display=swap" + highlightjs: + integrity: + css: + light: "sha256-Oppd74ucMR5a5Dq96FxjEzGF7tTw2fZ/6ksAqDCM8GY=" + dark: "sha256-nyCNAiECsdDHrr/s2OQsp5l9XeY2ZJ0rMepjCT2AkBk=" + url: + css: + light: "https://cdn.jsdelivr.net/npm/highlight.js@{{version}}/styles/github.min.css" + dark: "https://cdn.jsdelivr.net/npm/highlight.js@{{version}}/styles/github-dark.min.css" + version: "11.9.0" + imagesloaded: + integrity: + js: "sha256-htrLFfZJ6v5udOG+3kNLINIKh2gvoKqwEhHYfTTMICc=" + url: + js: "https://cdn.jsdelivr.net/npm/imagesloaded@{{version}}/imagesloaded.pkgd.min.js" + version: "5.0.0" + jquery: + integrity: + js: "sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" + url: + js: "https://cdn.jsdelivr.net/npm/jquery@{{version}}/dist/jquery.min.js" + version: "3.6.0" + leaflet: + integrity: + css: "sha256-q9ba7o845pMPFU+zcAll8rv+gC+fSovKsOoNQ6cynuQ=" + js: "sha256-MgH13bFTTNqsnuEoqNPBLDaqxjGH+lCpqrukmXc8Ppg=" + js_map: "sha256-YAoQ3FzREN4GmVENMir8vgHHypC0xfSK3CAxTHCqx1M=" + local: + images: "images/" + url: + css: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.min.css" + images: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/images/" + js: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.min.js" + js_map: "https://cdn.jsdelivr.net/npm/leaflet@{{version}}/dist/leaflet.js.map" + version: "1.9.4" + masonry: + integrity: + js: "sha256-Nn1q/fx0H7SNLZMQ5Hw5JLaTRZp0yILA/FRexe19VdI=" + url: + js: "https://cdn.jsdelivr.net/npm/masonry-layout@{{version}}/dist/masonry.pkgd.min.js" + version: "4.2.2" + mdb: + integrity: + css: "sha256-jpjYvU3G3N6nrrBwXJoVEYI/0zw8htfFnhT9ljN3JJw=" + css_map: "sha256-iYYMNfsJdVZjvsebJulg09miBXM4/GMTJgv1u5EZFFM=" + js: "sha256-NdbiivsvWt7VYCt6hYNT3h/th9vSTL4EDWeGs5SN3DA=" + js_map: "sha256-UPgyn4YNsT0khkBK5553QwhnlbTlU0aa+igyc6qP1bE=" + url: + css: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/css/mdb.min.css" + css_map: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/css/mdb.min.css.map" + js: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/js/mdb.min.js" + js_map: "https://cdn.jsdelivr.net/npm/mdbootstrap@{{version}}/js/mdb.min.js.map" + version: "4.20.0" + mermaid: + integrity: + js: "sha256-TtLOdUA8mstPoO6sGvHIGx2ceXrrX4KgIItO06XOn8A=" + url: + js: "https://cdn.jsdelivr.net/npm/mermaid@{{version}}/dist/mermaid.min.js" + version: "10.7.0" + mathjax: + integrity: + js: "sha256-MASABpB4tYktI2Oitl4t+78w/lyA+D7b/s9GEP0JOGI=" + local: + fonts: "output/chtml/fonts/woff-v2/" + url: + fonts: "https://cdn.jsdelivr.net/npm/mathjax@{{version}}/es5/output/chtml/fonts/woff-v2/" + js: "https://cdn.jsdelivr.net/npm/mathjax@{{version}}/es5/tex-mml-chtml.js" + version: "3.2.2" + tikzjax: + integrity: + css: "sha256-p+CQrhSq3dnLHELDcVBFDf4whOor3w8gzLuc/pwRLyQ=" + js: "sha256-7SCmUR11IG4MkSoeLUq0pombv7oeV7yZuu7Z82e4Uy4=" + url: + css: "https://cdn.jsdelivr.net/npm/@planktimerr/tikzjax@{{version}}/dist/fonts.css" + js: "https://cdn.jsdelivr.net/npm/@planktimerr/tikzjax@{{version}}/dist/tikzjax.js" + version: "1.0.8" + tocbot: + integrity: + css: "sha256-zTN0r+0OKaIv2xqeNNIYxNk0pWJ6+IqPGc1iDgVzWF0=" + js: "sha256-lo/r+jQ81wWrxdIiiiEEd538z4+dTJTt+leOuAS7GCw=" + url: + css: "https://cdn.jsdelivr.net/npm/tocbot@{{version}}/dist/tocbot.css" + js: "https://cdn.jsdelivr.net/npm/tocbot@{{version}}/dist/tocbot.min.js" + version: "4.36.4" + plotly: + integrity: + js: "sha256-oy6Be7Eh6eiQFs5M7oXuPxxm9qbJXEtTpfSI93dW16Q=" + url: + js: "https://cdn.jsdelivr.net/npm/plotly.js@{{version}}/dist/plotly.min.js" + version: "3.0.1" + pseudocode: + integrity: + css: "sha256-VwMV//xgBPDyRFVSOshhRhzJRDyBmIACniLPpeXNUdc=" + js: "sha256-aVkDxqyzrB+ExUsOY9PdyelkDhn/DfrjWu08aVpqNlo=" + url: + css: "https://cdn.jsdelivr.net/npm/pseudocode@{{version}}/build/pseudocode.min.css" + js: "https://cdn.jsdelivr.net/npm/pseudocode@{{version}}/build/pseudocode.min.js" + version: "2.4.1" + scholar-icons: + integrity: + css: "sha256-VY3hHVj/hNX3fYG6wtbA6TcKJQl7+FthzGSyIB64klY=" + url: + css: "https://cdn.jsdelivr.net/npm/scholar-icons@{{version}}/css/scholar-icons.css" + version: "1.0.3" + vanilla-back-to-top: + integrity: + js: "sha256-uMJJ3EoTyfRBoTbR+lrfu1uRQ87RZG8AR3cVNuQVeFg=" + url: + js: "https://cdn.jsdelivr.net/npm/vanilla-back-to-top@{{version}}/dist/vanilla-back-to-top.min.js" + version: "7.2.1" + vanilla-cookieconsent: + integrity: + css: "sha256-ygRrixsQlBByBZiOcJamh7JByO9fP+/l5UPtKNJmRsE=" + js: "sha256-vG4vLmOB/AJbJ6awr7Wg4fxonG+fxAp4cIrbIFTvRXU=" + url: + css: "https://cdn.jsdelivr.net/npm/vanilla-cookieconsent@{{version}}/dist/cookieconsent.css" + js: "https://cdn.jsdelivr.net/npm/vanilla-cookieconsent@{{version}}/dist/cookieconsent.umd.js" + version: "3.1.0" + vega: + integrity: + js: "sha256-Yot/cfgMMMpFwkp/5azR20Tfkt24PFqQ6IQS+80HIZs=" + js_map: "sha256-z0x9ICA65dPkZ0JVa9wTImfF6n7AJsKc6WlFE96/wNA=" + url: + js: "https://cdn.jsdelivr.net/npm/vega@{{version}}/build/vega.min.js" + js_map: "https://cdn.jsdelivr.net/npm/vega@{{version}}/build/vega.min.js.map" + version: "5.27.0" + vega-embed: + integrity: + js: "sha256-FPCJ9JYCC9AZSpvC/t/wHBX7ybueZhIqOMjpWqfl3DU=" + js_map: "sha256-VBbfSEFYSMdX/rTdGrONEHNP6BprCB7H/LpMMNt/cPA=" + url: + js: "https://cdn.jsdelivr.net/npm/vega-embed@{{version}}/build/vega-embed.min.js" + js_map: "https://cdn.jsdelivr.net/npm/vega-embed@{{version}}/build/vega-embed.min.js.map" + version: "6.24.0" + vega-lite: + integrity: + js: "sha256-TvBvIS5jUN4BSy009usRjNzjI1qRrHPYv7xVLJyjUyw=" + js_map: "sha256-l2I4D5JC23Ulsu6e3sKVe5AJ+r+DFkzkKnZS8nUGz28=" + url: + js: "https://cdn.jsdelivr.net/npm/vega-lite@{{version}}/build/vega-lite.min.js" + js_map: "https://cdn.jsdelivr.net/npm/vega-lite@{{version}}/build/vega-lite.min.js.map" + version: "5.16.3" + +# ----------------------------------------------------------------------------- +# Get external JSON data +# ----------------------------------------------------------------------------- + +# Not used: CV is driven by _data/cv.yml (RenderCV format) instead of the +# JSONResume format, so there's no assets/json/resume.json to fetch. diff --git a/_data/cv.yml b/_data/cv.yml new file mode 100644 index 0000000..cc5e219 --- /dev/null +++ b/_data/cv.yml @@ -0,0 +1,115 @@ +cv: + name: Jay Ballesteros-Cobián + label: MPP Candidate, University of Chicago Harris School of Public Policy + email: jballesteros@uchicago.edu + location: Chicago, IL + image: "" + summary: Data analyst and policy researcher working at the intersection of causal inference, technology governance, and development policy. Fellow at UChicago's Existential Risk Laboratory (XLab). + + social_networks: + - network: GitHub + username: jballesterosc + - network: LinkedIn + username: jay-ballesteros + + address: + city: Chicago + region: IL + countryCode: US + + sections: + Education: + - institution: University of Chicago, Harris School of Public Policy + location: Chicago, IL + url: https://harris.uchicago.edu/academics/degrees/master-public-policy-mpp + area: Data Analytics, Finance, and International Policy and Development + studyType: Master of Public Policy (MPP) + start_date: 2025 + end_date: 2027 + highlights: + - Fellow, Existential Risk Laboratory (XLab) + + Experience: + - company: DiDi Global Inc. + position: Senior Operations Analyst + location: Mexico City, Mexico + start_date: 2025-04 + end_date: 2025-12 + highlights: + - Directed marketplace operations across three Mexican cities, overseeing a combined annual GMV of MXN 3.7B and a weekly incentives portfolio averaging MXN 4M + - Created and executed randomized and quasi-experimental tests (A/B testing) to evaluate supply-demand balancing tactics on trips, fulfillment rates, user satisfaction, and other KPIs + - Built performance dashboards and automated reporting pipelines using Python, SQL, and Looker Studio; produced weekly analytical briefs for senior leadership with experiment results and action plans + - Partnered with regional and central teams (pricing, marketing, strategy, CX) to scale successful pilots and adapt evidence-based practices across markets + + - company: Soy+ (soymas.la) + position: Strategy Analyst + location: Mexico City, Mexico + start_date: 2025-03 + end_date: 2025-04 + highlights: + - Aligned technology, commercial, and communications teams by translating requirements into actionable data-collection and analysis tools + - Built automated Looker Studio dashboards connected via APIs to real-time databases to track conversion rates and weekly performance + - Unified Mailchimp, Meta API, Supabase, and Vercel data into structured datasets for campaign evaluation, user segmentation, and behavior analysis + - Collaborated in the development of the backend of internal tools to ensure interoperability between systems and traceability of data used in strategic reports + + - company: C230 Consulting and Fundación IDEA + position: Senior Analyst + location: Mexico City, Mexico + start_date: 2021-01 + end_date: 2025-03 + highlights: + - Delivered eight projects across security and justice reform, monitoring and evaluation, interinstitutional coordination, process optimization, and market analysis for clients including the U.S. Department of State, SANOFI, and USAID–Chemonics + - Developed institutional-strengthening toolkits for State Attorney General Offices, leading process mapping and stakeholder engagement to improve investigative outcomes + - Created data-collection instruments for more than 80 private-sector stakeholders in Honduras and El Salvador to inform the AMEXCID Jóvenes Construyendo el Futuro project + - Designed continuous improvement tools for investigative police training programs, integrating quantitative and qualitative methods to strengthen law enforcement capacity and ensure data-driven decision-making + - Authored comprehensive analyses of the Impulso Nuevo León 2022 Loan Guarantee Program, measuring pre- and post-treatment data to evaluate changes in beneficiaries' sales and employment levels + - Conducted an in-depth study on the quality of life of individuals with Atopic Dermatitis (AD) for SANOFI, utilizing interviews, surveys, and advanced data analytics to produce evidence-based recommendations for national health institutions + - Advised on best practices in agriculture, youth workforce development, and migration across El Salvador, Honduras, Guatemala, and Mexico, identifying enabling conditions and essential criteria for replicable initiatives + - Built measurement frameworks to systematically monitor recidivism in civic and criminal justice systems, empowering municipalities to track progress and improve outcomes in alternative dispute resolution mechanisms + + - company: DataCol + position: Founder and Data Analyst + location: Colima, Mexico + start_date: 2020-05 + end_date: 2021-07 + highlights: + - Led a government-funded analytics initiative for real-time COVID-19 monitoring in Colima, building time-series visuals for infection and testing + - Analyzed Google mobility datasets to inform public health strategies; delivered Python tools to the State Secretary of Health for cabinet briefings + - Assessed Facebook political advertising during the 2021 state elections, providing insights on reach, audience, and engagement + + - company: International Republican Institute + position: Consultant + location: Mexico City, Mexico + start_date: 2018-08 + end_date: 2021-07 + highlights: + - Coordinated the Security with Justice Program in five states with government, civil society, academia, and the private sector to promote ADR mechanisms + - Facilitated 30+ workshops on Restorative Justice and ADR, training 1,100+ participants at awareness and technical levels + - Collected, analyzed, and reported open data on alternative justice across 15 states, identifying best practices and improvement areas + - Managed Monitoring, Evaluation, and Learning (MEL) indicators in DevResults and Tableau, integrating real-time insights into program planning and stakeholder reporting + + - company: Coparmex + position: Competitiveness Manager + location: Colima, Mexico + start_date: 2016-06 + end_date: 2018-08 + highlights: + - Directed capacity-building programs on business administration, productivity, tax reforms, and labor rights for affiliated companies + - Produced research on security, justice, and economic trends to guide strategic decision-making for members and stakeholders + + Publications: + - title: "Slowing the Race Toward AGI: International Coordination and Domestic Measures to Reduce Catastrophic Risk" + authors: + - Jay Ballesteros-Cobián + publisher: Existential Risk Laboratory (XLab), University of Chicago + releaseDate: 2026-06 + url: /assets/pdf/policy-memo_ENG.pdf + summary: Policy brief framing AI safety as a collective-action problem, and proposing international coordination and domestic measures to reduce catastrophic risk. + + - title: "Atopic Dermatitis: Beyond the Skin. Impact on Quality of Life in México" + authors: + - Jay Ballesteros-Cobián + publisher: Fundación IDEA + releaseDate: 2024-05 + url: https://fundacionidea.org.mx/publication_detail/84 + summary: Co-authored report examining the physical, psychological, social, and economic impact of atopic dermatitis in Mexico. diff --git a/_data/socials.yml b/_data/socials.yml new file mode 100644 index 0000000..5ce3beb --- /dev/null +++ b/_data/socials.yml @@ -0,0 +1,6 @@ +# this file contains the social media links and usernames of the author +# the socials will be displayed in the order they are defined here +# for more information, please refer to the documentation of jekyll-socials plugin: https://github.com/george-gca/jekyll-socials +email: jballesteros@uchicago.edu # your email address +github_username: jballesterosc +linkedin_username: jay-ballesteros diff --git a/_includes/cv/education.liquid b/_includes/cv/education.liquid new file mode 100644 index 0000000..b914ab5 --- /dev/null +++ b/_includes/cv/education.liquid @@ -0,0 +1,96 @@ +{% comment %} + Local override of al_folio_cv's cv/education.liquid: same rendering, + minus the location-dot icon before the location text. +{% endcomment %} + + diff --git a/_includes/cv/experience.liquid b/_includes/cv/experience.liquid new file mode 100644 index 0000000..ae0023e --- /dev/null +++ b/_includes/cv/experience.liquid @@ -0,0 +1,96 @@ +{% comment %} + Local override of al_folio_cv's cv/experience.liquid: same rendering, + minus the location-dot icon before the location text. +{% endcomment %} + + diff --git a/_includes/footer.liquid b/_includes/footer.liquid new file mode 100644 index 0000000..d8d2c6a --- /dev/null +++ b/_includes/footer.liquid @@ -0,0 +1,27 @@ +{% comment %} + Local override of al_folio_core's footer.liquid: drop the "© Copyright + " preamble and "Hosted by GitHub Pages" — keep only the + theme credit (site.footer_text). +{% endcomment %} + +{% if site.footer_fixed %} +
+
+ {{ site.footer_text }} +
+
+{% else %} +
+ {% if site.newsletter.enabled %} + {% if site.plugins contains 'al_newsletter' %} + {% include plugins/al_newsletter_form_center.liquid %} + {% else %} + {% include newsletter.liquid %} + {% endif %} + {% endif %} + +
+ {{ site.footer_text }} +
+
+{% endif %} diff --git a/_layouts/about.liquid b/_layouts/about.liquid new file mode 100644 index 0000000..e463a9b --- /dev/null +++ b/_layouts/about.liquid @@ -0,0 +1,79 @@ +--- +layout: default +--- +{% comment %} + Local override of al_folio_core's about.liquid: bio text and profile + picture sit in a two-column layout (text left, picture right) instead + of a float, so the text never wraps around/under the picture. Social + icons render left-aligned right after the bio text. The "more_info"/ + location line and the "selected publications" section are dropped. +{% endcomment %} +
+
+

+ {% if site.title == 'blank' %} + {{ site.first_name }} {{ site.middle_name }} + {{ site.last_name }} + {% else %} + {{ site.title }} + {% endif %} +

+

{{ page.subtitle }}

+
+ +
+
+
+ {{ content }} + + {% if page.social %} + + {% endif %} +
+ + {% if page.profile and page.profile.image %} +
+ {% assign profile_image_path = page.profile.image | prepend: 'assets/img/' %} + {% if page.profile.image_circular %} + {% assign profile_image_class = 'img-fluid rounded-circle' %} + {% else %} + {% assign profile_image_class = 'img-fluid + rounded' %} + {% endif %} + {% capture sizes %}(min-width: {{ site.max_width }}) {{ site.max_width | minus: 30 | times: 0.3}}px, (min-width: 576px) + 30vw, 95vw"{% endcapture %} + {% + include figure.liquid loading="eager" path=profile_image_path class=profile_image_class sizes=sizes alt=page.profile.image + cache_bust=true + %} +
+ {% endif %} +
+ + + {% if page.announcements and page.announcements.enabled %} +

+ news +

+ {% include news.liquid limit=true %} + {% endif %} + + + {% if page.latest_posts and page.latest_posts.enabled %} +

+ latest posts +

+ {% include latest_posts.liquid %} + {% endif %} + + {% if site.newsletter and site.newsletter.enabled and site.footer_fixed %} + {% if site.plugins contains 'al_newsletter' %} + {% include plugins/al_newsletter_form_center_margin.liquid %} + {% else %} + {% include newsletter.liquid center=true %} + {% endif %} + {% endif %} +
+
diff --git a/_layouts/template.html b/_layouts/template.html deleted file mode 100644 index a38bdc3..0000000 --- a/_layouts/template.html +++ /dev/null @@ -1,97 +0,0 @@ - - - - - - - Jay Ballesteros - -{% seo %} - - - - - - -
-
- - -
-
-

Jay Ballesteros

-

Master of Public Policy (MPP) candidate at The University of Chicago

- jballesteros [at] uchicago.edu -
- - resume -
- - linkedin -
- - github -
- - - - {% if site.show_downloads %} - - {% endif %} -
- -
- - - - {{ content }} - - - -
- -
- - {% if site.google_analytics %} - - {% endif %} - - \ No newline at end of file diff --git a/_pages/404.md b/_pages/404.md new file mode 100644 index 0000000..f0d9804 --- /dev/null +++ b/_pages/404.md @@ -0,0 +1,9 @@ +--- +layout: page +permalink: /404.html +title: "Page not found" +description: "Looks like there has been a mistake. Nothing exists here." +redirect: true +--- + +You will be redirected to the main page within 3 seconds. If not redirected, please go back to the [home page]({{ site.baseurl | prepend: site.url }}). diff --git a/index.md b/_pages/about.md similarity index 61% rename from index.md rename to _pages/about.md index 042b791..8e77beb 100644 --- a/index.md +++ b/_pages/about.md @@ -1,12 +1,24 @@ --- -title: About me -layout: template -filename: index -order: 0 ---- ------------------- +layout: about +title: about +permalink: / +subtitle: MPP candidate, University of Chicago Harris School of Public Policy +profile: + align: right + image: prof_pic.jpg + image_circular: false # crops the image to make it circular -I am a [Master of Public Policy candidate at the University of Chicago Harris School](https://harris.uchicago.edu/academics/degrees/master-public-policy-mpp){:target="_blank"} pursuing the [Data Analytics](https://harris.uchicago.edu/academics/design-your-path/specializations/specialization-data-analytics), [Finance](https://harris.uchicago.edu/academics/design-your-path/specializations/specialization-finance-policy), [International Policy and Development](https://harris.uchicago.edu/academics/design-your-path/specializations/specialization-international-policy-development) specializations at Harris, working at the intersection of causal inference, technology governance, and development policy. I am a Fellow at UChicago's [Existential Risk Laboratory (XLab)](https://xrisk.uchicago.edu/){:target="_blank"}, where I am learning about AI governance and policy. +selected_papers: false # includes a list of papers marked as "selected={true}" +social: true # includes social icons under the profile picture -Before Harris, I built evidence-based tools for governments, multilaterals, and private-sector clients across Latin America. Most recently, at [DiDi Global](https://web.didiglobal.com/){:target="_blank"}, I ran marketplace experiments (A/B and quasi-experimental designs) across three Mexican cities to optimize a MXN 3.7B annual GMV portfolio, and built the dashboards and pipelines that turned those results into insights for senior leadership. Earlier, at [Fundación IDEA](https://fundacionidea.org.mx/){:target="_blank"} and [C230 Consulting](https://c-230.com/){:target="_blank"}, I worked on impact evaluations, M&E systems and toolkits for clients including the [U.S. Department of State](https://2021-2025.state.gov/bureau-of-international-narcotics-and-law-enforcement-affairs-work-by-country/mexico-summary/){:target="_blank"}, [USAID](https://www.usaid.gov/){:target="_blank"}–[Chemonics](https://www.chemonics.com/){:target="_blank"}, [AMEXCID](https://www.gob.mx/amexcid){:target="_blank"}, [Sanofi](https://www.sanofi.com/es/mexico){:target="_blank"}, [Fundación Amparo](https://www.fundacionamparo.com/){:target="_blank"}, and multiple Mexican state governments. I also founded DataCol, an open-data platform that supported real-time COVID-19 monitoring in Colima and was later transferred to the State Health Secretariat. \ No newline at end of file +announcements: + enabled: false # no separate news/announcements feed; see the "writing" section instead + +latest_posts: + enabled: false +--- + +I am a [Master of Public Policy candidate at the University of Chicago Harris School](https://harris.uchicago.edu/academics/degrees/master-public-policy-mpp){:target="_blank"} pursuing the [Data Analytics](https://harris.uchicago.edu/academics/design-your-path/specializations/specialization-data-analytics), [Finance](https://harris.uchicago.edu/academics/design-your-path/specializations/specialization-finance-policy), and [International Policy and Development](https://harris.uchicago.edu/academics/design-your-path/specializations/specialization-international-policy-development) specializations at Harris, working at the intersection of causal inference, technology governance, and development policy. I am a Fellow at UChicago's [Existential Risk Laboratory (XLab)](https://xrisk.uchicago.edu/){:target="_blank"}, where I am learning about AI governance and policy. + +Before Harris, I built evidence-based tools for governments, multilaterals, and private-sector clients across Latin America. Most recently, at [DiDi Global](https://web.didiglobal.com/){:target="_blank"}, I ran marketplace experiments (A/B and quasi-experimental designs) across three Mexican cities to optimize a MXN 3.7B annual GMV portfolio, and built the dashboards and pipelines that turned those results into insights for senior leadership. Earlier, at [Fundación IDEA](https://fundacionidea.org.mx/){:target="_blank"} and [C230 Consulting](https://c-230.com/){:target="_blank"}, I worked on impact evaluations, M&E systems and toolkits for clients including the [U.S. Department of State](https://2021-2025.state.gov/bureau-of-international-narcotics-and-law-enforcement-affairs-work-by-country/mexico-summary/){:target="_blank"}, [USAID](https://www.usaid.gov/){:target="_blank"}–[Chemonics](https://www.chemonics.com/){:target="_blank"}, [AMEXCID](https://www.gob.mx/amexcid){:target="_blank"}, [Sanofi](https://www.sanofi.com/es/mexico){:target="_blank"}, [Fundación Amparo](https://www.fundacionamparo.com/){:target="_blank"}, and multiple Mexican state governments. I also founded DataCol, an open-data platform that supported real-time COVID-19 monitoring in Colima and was later transferred to the State Health Secretariat. diff --git a/_pages/cv.md b/_pages/cv.md new file mode 100644 index 0000000..3cfbcc2 --- /dev/null +++ b/_pages/cv.md @@ -0,0 +1,11 @@ +--- +layout: cv +permalink: /cv/ +title: CV +nav: true +nav_order: 1 +# cv_pdf: /assets/pdf/CV.pdf # drop your own PDF (e.g. exported from LaTeX) in assets/pdf/ and uncomment this line to show a download button +cv_format: rendercv # options: rendercv, jsonresume. "rendercv" here just means the CV page reads _data/cv.yml — no PDF generation is involved +toc: + sidebar: left +--- diff --git a/_pages/projects.md b/_pages/projects.md new file mode 100644 index 0000000..9376051 --- /dev/null +++ b/_pages/projects.md @@ -0,0 +1,28 @@ +--- +layout: page +title: projects +permalink: /projects/ +description: A few personal projects and things I've built. +nav: true +nav_order: 2 +--- + + +{% assign sorted_projects = site.projects | sort: "importance" %} + + diff --git a/_pages/publications.md b/_pages/publications.md new file mode 100644 index 0000000..e0b1feb --- /dev/null +++ b/_pages/publications.md @@ -0,0 +1,15 @@ +--- +layout: page +permalink: /publications/ +title: publications +nav: true +nav_order: 3 +--- + + + +
+ +{% bibliography %} + +
diff --git a/_pages/writing.md b/_pages/writing.md new file mode 100644 index 0000000..8f4277e --- /dev/null +++ b/_pages/writing.md @@ -0,0 +1,40 @@ +--- +layout: page +title: writing +permalink: /writing/ +nav: true +nav_order: 4 +pagination: + enabled: true + collection: posts + permalink: /writing/page/:num/ + per_page: 20 + sort_field: date + sort_reverse: true + trail: + before: 1 + after: 3 +--- + +{% if page.pagination.enabled %} + {% assign postlist = paginator.posts %} +{% else %} + {% assign postlist = site.posts %} +{% endif %} + +{% if postlist.size > 0 %} +
    + {% for post in postlist %} +
  • + {{ post.date | date: "%b %Y" }} + {{ post.title }} +
  • + {% endfor %} +
+{% else %} +

Nothing here yet.

+{% endif %} + +{% if page.pagination.enabled %} +{% include pagination.liquid %} +{% endif %} diff --git a/_projects/1_datacol.md b/_projects/1_datacol.md new file mode 100644 index 0000000..fd14420 --- /dev/null +++ b/_projects/1_datacol.md @@ -0,0 +1,20 @@ +--- +layout: page +title: DataCol +description: Open-data platform for real-time COVID-19 monitoring in Colima, Mexico +timeframe: 2020–2021 +github: https://github.com/jballesterosc/datacol_backup/tree/main/_backup +importance: 5 +category: personal +related_publications: false +--- + +A personal project to scrape and analyze data from COVID-19 reports in Colima, Mexico. The work involved data cleaning, visualization, and descriptive statistics to better understand the spread and impact of the virus across the state. + +A key milestone was receiving an award from the state government to support the development of a web application that visualized the data and provided real-time updates to the public. The final outcome was the full handover of the application to the Ministry of Health of Colima. + +Another takeaway is that I built this platform in the pre-ChatGPT era, so most of the code was written from scratch. This significantly strengthened my Python skills and my understanding of data analysis workflows. + +View the code on GitHub + + diff --git a/_projects/3_desaparecidosmx.md b/_projects/3_desaparecidosmx.md new file mode 100644 index 0000000..6a98e0b --- /dev/null +++ b/_projects/3_desaparecidosmx.md @@ -0,0 +1,15 @@ +--- +layout: page +title: DesaparecidosMX +description: Mexico's national missing-persons registry, turned into clean monthly CSVs by entity, category, sex, and municipality +timeframe: 2025–present +redirect: https://desaparecidosmx.streamlit.app/ +github: https://github.com/jballesterosc/desaparecidosmx +importance: 3 +category: personal +related_publications: false +--- + +Transforms Mexico's national missing-persons registry into clean, monthly CSVs disaggregated by entity, category, sex, and municipality. + +Dashboard · Code diff --git a/_projects/4_observatorio-delictivo.md b/_projects/4_observatorio-delictivo.md new file mode 100644 index 0000000..bfcf4fa --- /dev/null +++ b/_projects/4_observatorio-delictivo.md @@ -0,0 +1,15 @@ +--- +layout: page +title: Observatorio Delictivo +description: Open pipeline tracking crime incidence, victimization, and security perception across Mexico +timeframe: 2026–present +redirect: https://github.com/jballesterosc/observatorio-delictivo-mx +github: https://github.com/jballesterosc/observatorio-delictivo-mx +importance: 1 +category: personal +related_publications: false +--- + +An open pipeline tracking crime incidence, victimization, and security perception across Mexico with standardized population rates. + +Code diff --git a/_projects/5_politica-meta.md b/_projects/5_politica-meta.md new file mode 100644 index 0000000..e7f0e33 --- /dev/null +++ b/_projects/5_politica-meta.md @@ -0,0 +1,15 @@ +--- +layout: page +title: Política Meta +description: Political ad spend on Facebook and Instagram in Mexico, aggregated by page, state, and month +timeframe: 2022–present +redirect: https://github.com/umbralmx/politica-meta +github: https://github.com/umbralmx/politica-meta +importance: 4 +category: personal +related_publications: false +--- + +Analyzes political ad spending on Facebook and Instagram in Mexico, aggregated by page, state, and month. + +Code diff --git a/_projects/6_cabildo-libre.md b/_projects/6_cabildo-libre.md new file mode 100644 index 0000000..23a0332 --- /dev/null +++ b/_projects/6_cabildo-libre.md @@ -0,0 +1,15 @@ +--- +layout: page +title: Cabildo Libre +description: Searchable archive of Colima's municipal council minutes — 636 sessions, 2012–2026 +timeframe: 2026–present +redirect: https://umbralmx.github.io/cabildo-libre/ +github: https://github.com/umbralmx/cabildo-libre +importance: 2 +category: personal +related_publications: false +--- + +A searchable archive of Colima municipal council minutes: 636 sessions spanning 2012–2026. + +Search tool · Code diff --git a/_sass/_custom.scss b/_sass/_custom.scss new file mode 100644 index 0000000..bbe00e4 --- /dev/null +++ b/_sass/_custom.scss @@ -0,0 +1,245 @@ +/******************************************************************************* + * Custom overrides layered on top of al_folio_core + * + * - Typography: serif for body/prose (Newsreader), monospace for nav/UI + * chrome and dates (IBM Plex Mono). Smaller base size everywhere. + * - Flatter, more minimal surfaces: no card borders/shadows. + * - Smaller footer/copyright text, smaller social icons. + * - Minimal "writing" list (date + title only, no cards). + * + * This file is unlayered plain CSS output (not inside a Tailwind @layer), + * so it wins over assets/css/tailwind.css's `@layer base` rules regardless + * of load order. + ******************************************************************************/ + +@import url("https://fonts.googleapis.com/css2?family=Newsreader:ital,wght@0,400;0,500;0,600;0,700;1,400&family=IBM+Plex+Mono:wght@400;500;600&display=swap"); + +$serif: "Newsreader", Georgia, "Times New Roman", Times, serif; +$mono: "IBM Plex Mono", SFMono-Regular, Consolas, "Liberation Mono", monospace; + +html { + font-size: 14px; +} + +body { + font-family: $serif; +} + +.navbar-brand, +.nav-link, +.badge, +.btn, +code, +pre, +kbd, +.periodical, +.search-input, +input, +button, +footer, +footer a { + font-family: $mono; +} + +/* Flatten cards: no border, no drop shadow */ +.card { + box-shadow: none; + border: none; + border-radius: 0; +} + +/* al_folio_cv's own SCSS sets `.cv .card { border: 1px solid ... }`, which + is more specific than the generic `.card` rule above, so it needs its + own override — same for the divider lines between list entries. */ +.cv .card { + border: none; +} + +.cv .card .list-group-item { + border-color: transparent; +} + +/* al_folio_core's generic `table:not(.table) td { border-top: ... }` rule + (_typography.scss) leaks into the CV's date/location table. */ +.date-column .table-cv td { + border-top: none; +} + +/* The CV's `
    ` never gets `list-style: none` from the + gem's own CSS, so each entry shows the browser's default bullet — this is + the stray dot next to the date/location column. */ +.cv .list-group { + list-style: none; +} + +.hoverable:hover, +.hoverable:focus { + box-shadow: none; +} + +.btn, +.badge { + border-radius: 2px; +} + +/* Smaller, muted copyright line */ +footer { + font-size: 0.65rem; + color: var(--global-text-color-light); +} + +footer a { + color: var(--global-text-color-light); +} + +/* Smaller social icons on the about page */ +.social .contact-icons { + font-size: 1.5rem; +} + +.social .contact-icons a img { + width: 1.4rem; + height: 1.4rem; + margin-bottom: 0; +} + +/* About page: two real columns (bio text left, picture right) instead + of a float, so the text never wraps around/under the picture. */ +.about-columns { + display: flex; + align-items: flex-start; + gap: 3.5rem; +} + +.about-text { + flex: 1 1 auto; + min-width: 0; +} + +.about-photo { + flex: 0 0 auto; +} + +.about-photo img { + display: block; + width: 100%; + max-width: 200px; + box-shadow: none; +} + +@media (max-width: 576px) { + .about-columns { + flex-direction: column-reverse; + gap: 1.5rem; + } +} + +/* Social icons: left-aligned, right after the bio text (see + _layouts/about.liquid) rather than centered at the page bottom. */ +.social { + text-align: left; + margin-top: 1rem; +} + +/* Minimal writing list: date + title only, hairline row dividers */ +.writing-list { + list-style: none; + margin: 0; + padding: 0; +} + +.writing-list li { + display: flex; + align-items: baseline; + gap: 1.25rem; + padding: 0.6rem 0; + border-bottom: 1px solid var(--global-divider-color); +} + +.writing-list .writing-date { + font-family: $mono; + font-size: 0.8rem; + color: var(--global-text-color-light); + white-space: nowrap; + min-width: 5.5rem; +} + +.writing-list .writing-title { + color: var(--global-text-color); +} + +.writing-list .writing-title:hover { + color: var(--global-text-color); + text-decoration: underline; +} + +.writing-empty { + color: var(--global-text-color-light); + font-size: 0.9rem; +} + +/* Projects page: one full-width row per project (title + timeframe, + description, optional code link), no cards/columns/thumbnails. */ +.project-list { + list-style: none; + margin: 0; + padding: 0; +} + +.project-list > li { + padding: 1.25rem 0; + border-bottom: 1px solid var(--global-divider-color); +} + +.project-list > li:first-child { + padding-top: 0; +} + +.project-row { + display: block; + color: var(--global-text-color); +} + +.project-row:hover { + color: var(--global-text-color); +} + +.project-row:hover .project-title { + text-decoration: underline; +} + +.project-row-header { + display: flex; + align-items: baseline; + flex-wrap: wrap; + gap: 0.85rem; +} + +.project-title { + font-size: 1.15rem; + font-weight: 600; +} + +.project-timeframe { + font-family: $mono; + font-size: 0.8rem; + color: var(--global-text-color-light); + white-space: nowrap; +} + +.project-description { + margin: 0.35rem 0 0; +} + +.project-code-link { + display: inline-block; + margin-top: 0.5rem; + font-family: $mono; + font-size: 0.75rem; + color: var(--global-text-color-light); +} + +.project-code-link:hover { + color: var(--global-text-color-light); + text-decoration: underline; +} diff --git a/_sass/_themes.scss b/_sass/_themes.scss new file mode 100644 index 0000000..a2194d4 --- /dev/null +++ b/_sass/_themes.scss @@ -0,0 +1,203 @@ +/******************************************************************************* + * Themes (local override) + * + * Full copy of al_folio_core's _sass/_themes.scss with the color tokens + * swapped for a muted, warm monochrome palette (minimal design, no bright + * accent color) — see _sass/_custom.scss for the typography changes that + * go with this. + ******************************************************************************/ +@use "variables" as v; +@use "sass:color"; + +:root { + color-scheme: light; + --global-bg-color: #fffefb; + --global-code-bg-color: #{v.$code-bg-color-light}; + --global-text-color: #1a1a18; + --global-text-color-light: #86847c; + --global-theme-color: #6b6a63; + --global-hover-color: #1a1a18; + --global-hover-text-color: #fffefb; + --global-footer-bg-color: #fffefb; + --global-footer-text-color: #86847c; + --global-footer-link-color: #1a1a18; + --global-distill-app-color: #{v.$grey-color}; + --global-divider-color: rgba(26, 26, 24, 0.14); + --global-card-bg-color: #fffefb; + --global-highlight-color: #{v.$red-color-dark}; + --global-back-to-top-bg-color: rgba(26, 26, 24, 0.4); + --global-back-to-top-text-color: #fffefb; + --global-newsletter-bg-color: #fffefb; + --global-newsletter-text-color: #1a1a18; + + --global-tip-block: #42b983; + --global-tip-block-bg: #e2f5ec; + --global-tip-block-text: #215d42; + --global-tip-block-title: #359469; + --global-warning-block: #e7c000; + --global-warning-block-bg: #fff8d8; + --global-warning-block-text: #6b5900; + --global-warning-block-title: #b29400; + --global-danger-block: #c00; + --global-danger-block-bg: #ffe0e0; + --global-danger-block-text: #600; + --global-danger-block-title: #c00; + + #light-toggle-system { + display: inline-block; + } + + #light-toggle-dark { + display: none; + } + + #light-toggle-light { + display: none; + } + + .only-light { + display: block; + } + + .only-dark { + display: none; + } + + #back-to-top { + color: var(--global-back-to-top-text-color); + background: var(--global-back-to-top-bg-color); + bottom: v.$back-to-top-bottom; + right: v.$back-to-top-right; + height: v.$back-to-top-height; + width: v.$back-to-top-width; + z-index: v.$back-to-top-z-index; + } +} + +html[data-theme="dark"] { + color-scheme: dark; + --global-bg-color: #111210; + --global-code-bg-color: #{v.$code-bg-color-dark}; + --global-text-color: #e9e7df; + --global-text-color-light: #89877f; + --global-theme-color: #a6a49b; + --global-hover-color: #e9e7df; + --global-hover-text-color: #111210; + --global-footer-bg-color: #111210; + --global-footer-text-color: #89877f; + --global-footer-link-color: #e9e7df; + --global-distill-app-color: #{v.$grey-color-light}; + --global-divider-color: rgba(233, 231, 223, 0.14); + --global-card-bg-color: #1b1c19; + --global-back-to-top-bg-color: rgba(233, 231, 223, 0.5); + --global-back-to-top-text-color: #111210; + --global-newsletter-bg-color: #1b1c19; + --global-newsletter-text-color: #e9e7df; + + --global-tip-block: #42b983; + --global-tip-block-bg: #215d42; + --global-tip-block-text: #beffe2; + --global-tip-block-title: #e2f5ec; + --global-warning-block: #e7c000; + --global-warning-block-bg: #6b5900; + --global-warning-block-text: #fff2af; + --global-warning-block-title: #fff8d8; + --global-danger-block: #c00; + --global-danger-block-bg: #600; + --global-danger-block-text: #ffb9b9; + --global-danger-block-title: #ffe0e0; + + .only-light { + display: none; + } + + .only-dark { + display: block; + } +} + +html[data-theme-setting="dark"] { + #light-toggle-system { + display: none; + } + + #light-toggle-dark { + display: inline-block; + } + + #light-toggle-light { + display: none; + } + + #back-to-top { + color: var(--global-back-to-top-text-color); + background: var(--global-back-to-top-bg-color); + } +} + +html[data-theme-setting="light"] { + #light-toggle-system { + display: none; + } + + #light-toggle-dark { + display: none; + } + + #light-toggle-light { + display: inline-block; + } +} + +.fa-half-sun-moon { + position: relative; + display: inline-block; + + --fa-font: var(--fa-font-solid); + speak: none; + font-style: normal; + font-variant: normal; + text-rendering: auto; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + width: 1em; + height: 1em; +} + +.fa-half-sun-moon::before, +.fa-half-sun-moon::after { + content: ""; + position: absolute; + inset: 0; + top: -0.5px; + bottom: -0.5px; + text-align: center; + line-height: 1em; + clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%); + font: var(--fa-font); +} + +/* Left half: MOON */ +.fa-half-sun-moon::before { + content: "\f111"; + color: var(--global-text-color); + clip-path: polygon(0 0, calc(50% - 0.5px) 0, calc(50% - 0.5px) 100%, 0 100%); +} + +/* Right half: SUN */ +.fa-half-sun-moon::after { + content: "\f185"; + color: var(--global-text-color); + clip-path: polygon(calc(50% + 0.5px) 0, 100% 0, 100% 100%, calc(50% + 0.5px) 100%); + right: -1.5px; /* slight overflow to avoid right-edge clipping */ + transform: translateX(-1px); /* visually re-center the sun half */ +} + +#light-toggle:hover .fa-half-sun-moon::before { + color: var(--global-theme-color); +} + +#light-toggle:hover .fa-half-sun-moon::after { + color: var(--global-theme-color); +} diff --git a/assets/css/main.scss b/assets/css/main.scss new file mode 100644 index 0000000..7cc5091 --- /dev/null +++ b/assets/css/main.scss @@ -0,0 +1,36 @@ +--- +# Only the main Sass file needs front matter (the dashes are enough) +--- +@charset "utf-8"; + +/* Built-in Sass modules you’ll likely use across partials */ +@use "sass:math"; +@use "sass:string"; + +/* Configure your design tokens BEFORE loading any of your partials. + Make sure `_sass/_variables.scss` declares `$max-content-width: 72rem !default;` */ +@use "variables" with ( + $max-content-width: {{ site.max_width | default: "930px" }} +); + +/* Your project partials — convert these files to `@use "variables";` + (or `@use "variables" as *;`) inside each file and qualify variables if needed. */ +@use "themes"; +@use "layout"; + +// Core styles organized by usage +@use "typography"; +@use "navbar"; +@use "footer"; +@use "blog"; +@use "publications"; +@use "components"; +@use "utilities"; + +// Other specialized styles +@use "tabs"; +@use "teachings"; +@use "typograms"; + +// Local overrides (fonts, flatter/minimal surfaces) — see _sass/_custom.scss +@use "custom"; diff --git a/documents/deaths_ma.html b/assets/html/deaths_ma.html similarity index 100% rename from documents/deaths_ma.html rename to assets/html/deaths_ma.html diff --git a/images/favicon.png b/assets/img/favicon.png similarity index 100% rename from images/favicon.png rename to assets/img/favicon.png diff --git a/images/jay_profile_circle_v2.jpg b/assets/img/prof_pic.jpg similarity index 100% rename from images/jay_profile_circle_v2.jpg rename to assets/img/prof_pic.jpg diff --git a/images/atopicdermatitis.png b/assets/img/publication_preview/atopicdermatitis.png similarity index 100% rename from images/atopicdermatitis.png rename to assets/img/publication_preview/atopicdermatitis.png diff --git a/documents/policy-memo_ENG.pdf b/assets/pdf/policy-memo_ENG.pdf similarity index 100% rename from documents/policy-memo_ENG.pdf rename to assets/pdf/policy-memo_ENG.pdf diff --git a/documents/policy-memo_ES.pdf b/assets/pdf/policy-memo_ES.pdf similarity index 100% rename from documents/policy-memo_ES.pdf rename to assets/pdf/policy-memo_ES.pdf diff --git a/documents/Analysis_Micro_PPT.pdf b/documents/Analysis_Micro_PPT.pdf deleted file mode 100644 index 3445b57..0000000 Binary files a/documents/Analysis_Micro_PPT.pdf and /dev/null differ diff --git a/documents/Statistics_BBB.pdf b/documents/Statistics_BBB.pdf deleted file mode 100644 index 8f019f2..0000000 Binary files a/documents/Statistics_BBB.pdf and /dev/null differ diff --git a/documents/Statistics_R.pdf b/documents/Statistics_R.pdf deleted file mode 100644 index 4cf1ea3..0000000 Binary files a/documents/Statistics_R.pdf and /dev/null differ diff --git a/documents/confirmed_ma_7.html b/documents/confirmed_ma_7.html deleted file mode 100644 index 047090e..0000000 --- a/documents/confirmed_ma_7.html +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - -
    - - - \ No newline at end of file diff --git a/experience.md b/experience.md deleted file mode 100644 index e913cbb..0000000 --- a/experience.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Experience -layout: template -filename: experience -order: 1 ---- - ------------ - -## DiDi Global Inc. - Senior Operations Analyst -_Mexico City | Apr 2025 – December 2025_ -* Directed marketplace operations across three Mexican cities, overseeing a combined annual GMV of MXN 3.7B and a weekly incentives portfolio averaging MXN 4M -* Created and executed randomized and quasi-experimental tests (A/B testing) to evaluate supply-demand balancing tactics on trips, fulfillment rates, user satisfaction, and other KPIs -* Built performance dashboards and automated reporting pipelines using Python, SQL, and Looker Studio; produced weekly analytical briefs for senior leadership with experiment results and action plans -* Partnered with regional and central teams (pricing, marketing, strategy, CX) to scale successful pilots and adapt evidence-based practices across markets - -## Soy+ (soymas.la) - Strategy Analyst -_Mexico City | Mar 2025 – Apr 2025_ -* Aligned technology, commercial, and communications teams by translating requirements into actionable data‑collection and analysis tools -* Built automated Looker Studio dashboards connected via APIs to real‑time databases to track conversion rates and weekly performance -* Unified Mailchimp, Meta API, Supabase, and Vercel data into structured datasets for campaign evaluation, user segmentation, and behavior analysis -* Collaborated in the development of the backend of internal tools to ensure interoperability between systems and traceability of data used in strategic reports - -## C230 Consulting and Fundación IDEA - Senior Analyst -_Mexico City | Jan 2021 – Mar 2025_ -* Delivered eight projects across security and justice reform, monitoring and evaluation, interinstitutional coordination, process optimization, and market analysis for clients including the U.S. Department of State, SANOFI, and USAID–Chemonics -* Developed institutional–strengthening toolkits for State Attorney General Offices, leading process mapping and stakeholder engagement to improve investigative outcomes -* Created data‑collection instruments for more than 80 private–sector stakeholders in Honduras and El Salvador to inform the AMEXCID Jovenes Construyendo el Futuro project -* Designed continuous improvement tools for investigative police training programs, integrating quantitative and qualitative methods to strengthen law enforcement capacity and ensure data‑driven decision‑making -* Authored comprehensive analyses of the Impulso Nuevo León 2022 Loan Guarantee Program, measuring pre‑ and post‑treatment data to evaluate changes in beneficiaries’ sales and employment levels -* Conducted an in‑depth study on the quality of life of individuals with Atopic Dermatitis (AD) for SANOFI, utilizing interviews, surveys, and advanced data analytics to produce evidence‑based recommendations for national health institutions -* Advised on best practices in agriculture, youth workforce development, and migration across El Salvador, Honduras, Guatemala, and Mexico, identifying enabling conditions and essential criteria for replicable initiatives -* Built measurement frameworks to systematically monitor recidivism in civic and criminal justice systems empowering municipalities to track progress and improve outcomes in alternative dispute resolution mechanisms - -## DataCol - Founder and Data Analyst -_Colima, Mexico | May 2020 – Jul 2021_ -* Led a government‑funded analytics initiative for real‑time COVID‑19 monitoring in Colima, building time‑series visuals for infection and testing -* Analyzed Google mobility datasets to inform public health strategies; delivered Python tools to the State Secretary of Health for cabinet briefings -* Assessed Facebook political advertising during the 2021 state elections, providing insights on reach, audience, and engagement - -## International Republican Institute - Consultant -_Mexico City | Aug 2018 – Jul 2021_ -* Coordinated the Security with Justice Program in five states with government, civil society, academia, and the private sector to promote ADR mechanisms -* Facilitated 30+ workshops on Restorative Justice and ADR, training 1,100+ participants at awareness and technical levels -* Collected, analyzed, and reported open data on alternative justice across 15 states, identifying best practices and improvement areas -* Managed Monitoring, Evaluation, and Learning (MEL) indicators in the DevResults and Tableau, integrating real‑time insights into program planning and stakeholder reporting - -## Coparmex - Competitiveness Manager -_Colima, Mexico | Jun 2016 – Aug 2018_ -* Directed capacity‑building programs on business administration, productivity, tax reforms, and labor rights for affiliated companies -* Produced research on security, justice, and economic trends to guide strategic decision‑making for members and stakeholders \ No newline at end of file diff --git a/images/.DS_Store b/images/.DS_Store deleted file mode 100644 index b898dd6..0000000 Binary files a/images/.DS_Store and /dev/null differ diff --git a/images/Analysis_Micro_PPT.pdf b/images/Analysis_Micro_PPT.pdf deleted file mode 100644 index 3445b57..0000000 Binary files a/images/Analysis_Micro_PPT.pdf and /dev/null differ diff --git a/images/BBB_hist.png b/images/BBB_hist.png deleted file mode 100644 index 727a314..0000000 Binary files a/images/BBB_hist.png and /dev/null differ diff --git a/images/datacol.png b/images/datacol.png deleted file mode 100644 index c3944f5..0000000 Binary files a/images/datacol.png and /dev/null differ diff --git a/images/jay_profile.jpg b/images/jay_profile.jpg deleted file mode 100644 index 7067a74..0000000 Binary files a/images/jay_profile.jpg and /dev/null differ diff --git a/images/jay_profile_circle.jpg b/images/jay_profile_circle.jpg deleted file mode 100644 index db11272..0000000 Binary files a/images/jay_profile_circle.jpg and /dev/null differ diff --git a/images/jay_profile_v2.JPG b/images/jay_profile_v2.JPG deleted file mode 100644 index 5073c73..0000000 Binary files a/images/jay_profile_v2.JPG and /dev/null differ diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..ab1daf4 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,191 @@ +{ + "name": "al-folio", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "@playwright/test": "^1.56.1", + "@shopify/prettier-plugin-liquid": "^1.10.0", + "pixelmatch": "^7.1.0", + "pngjs": "^7.0.0", + "prettier": "^3.8.0" + } + }, + "node_modules/@playwright/test": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", + "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright": "1.58.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@shopify/liquid-html-parser": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/@shopify/liquid-html-parser/-/liquid-html-parser-2.9.0.tgz", + "integrity": "sha512-bkI4tLbU47YUxpgbMa9fgeJjFEMvRNEFL644Yk0ZKo5H1IRzU4pPyCQ6PkGvb0JJnt7OZ+RDGvb6ZLCnAR2Z/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "line-column": "^1.0.2", + "ohm-js": "^17.0.0" + } + }, + "node_modules/@shopify/prettier-plugin-liquid": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@shopify/prettier-plugin-liquid/-/prettier-plugin-liquid-1.10.0.tgz", + "integrity": "sha512-csHYjwuT34o8ja6EY0dUBYQS5UVwsKwRYxGiuG816Ov0B8lVd8FUjOwWUk2SnrNx3cGgL0no7z+Byapp7sC1Uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shopify/liquid-html-parser": "^2.9.0", + "html-styles": "^1.0.0" + }, + "peerDependencies": { + "prettier": "^2.0.0 || ^3.0.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/html-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/html-styles/-/html-styles-1.0.0.tgz", + "integrity": "sha512-cDl5dcj73oI4Hy0DSUNh54CAwslNLJRCCoO+RNkVo+sBrjA/0+7E/xzvj3zH/GxbbBLGJhE0hBe1eg+0FINC6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/line-column": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/line-column/-/line-column-1.0.2.tgz", + "integrity": "sha512-Ktrjk5noGYlHsVnYWh62FLVs4hTb8A3e+vucNZMgPeAOITdshMSgv4cCZQeRDjm7+goqmo6+liZwTXo+U3sVww==", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "^1.0.0", + "isobject": "^2.0.0" + } + }, + "node_modules/ohm-js": { + "version": "17.3.0", + "resolved": "https://registry.npmjs.org/ohm-js/-/ohm-js-17.3.0.tgz", + "integrity": "sha512-LySMdjweN1hKBMMV8lM44+1wiewkndDNNJxtgVAscs7y683MXCdQZLsIaw64/p8NuqYbKOWZoHIOA5DU/xchoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.1" + } + }, + "node_modules/pixelmatch": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-7.1.0.tgz", + "integrity": "sha512-1wrVzJ2STrpmONHKBy228LM1b84msXDUoAzVEl0R8Mz4Ce6EPr+IVtxm8+yvrqLYMHswREkjYFaMxnyGnaY3Ng==", + "dev": true, + "license": "ISC", + "dependencies": { + "pngjs": "^7.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/playwright": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", + "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.58.2" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.58.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", + "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/pngjs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-7.0.0.tgz", + "integrity": "sha512-LKWqWJRhstyYo9pGvgor/ivk2w94eSjE3RGVuzLGlr3NmD8bf7RcYGze1mNdEHRP6TRP6rMuDHk5t44hnTRyow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.19.0" + } + }, + "node_modules/prettier": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.0.tgz", + "integrity": "sha512-yEPsovQfpxYfgWNhCfECjG5AQaO+K3dp6XERmOepyPDVqcJm+bjyCVO3pmU+nAPe0N5dDvekfGezt/EIiRe1TA==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..f2d223e --- /dev/null +++ b/package.json @@ -0,0 +1,15 @@ +{ + "scripts": { + "lint:prettier": "prettier . --check", + "lint:style-contract": "node test/style_contract.js", + "test:visual": "playwright test --config test/visual/playwright.config.js", + "test:visual:update": "playwright test --config test/visual/playwright.config.js --update-snapshots" + }, + "devDependencies": { + "@playwright/test": "^1.56.1", + "@shopify/prettier-plugin-liquid": "^1.10.0", + "pixelmatch": "^7.1.0", + "pngjs": "^7.0.0", + "prettier": "^3.8.0" + } +} diff --git a/portfolio.md b/portfolio.md deleted file mode 100644 index 77b3e9a..0000000 --- a/portfolio.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Portfolio -layout: template -filename: portfolio -order: 2 ---- - -------------- - -Here are a few examples of projects and publications I’ve worked on that might be relevant. Some consulting work can’t be shared due to NDAs, but I’m happy to talk through it if helpful. - -## Open publications - -#### [Slowing the Race Toward AGI: International Coordination and Domestic Measures to Reduce Catastrophic Risk](/documents/policy-memo_ENG.pdf){:target="_blank"} -_June 2026 | Existential Risk Laboratory (XLab), University of Chicago_ - -I wrote this policy brief as part of the AI Policy Fundamentals study group at UChicago's Existential Risk Laboratory (XLab). It frames AI safety as a collective action problem, where commercial and geopolitical competition pushes firms and governments to prioritize speed of deployment over the safety of their models. Drawing on recent work in economics and AI governance, the brief argues that regulation is one of the few mechanisms that can shift those incentives toward reducing catastrophic risk. - -The recommendations work across two complementary levels: a binding international agreement as a long-term goal --anchored on verifiable compute thresholds and chip tracking-- and domestic measures (model transparency and evaluation, compute nonproliferation, and slowdown commitments) that can reduce risk in the near term while building the technical groundwork for such an agreement. - - -#### [Atopic Dermatitis: Beyond the Skin. Impact on quality of life in México](https://fundacionidea.org.mx/publication_detail/84){:target="_blank"} -_May 2024 | Fundación IDEA_ - -During my time as a Senior Analyst at Fundación IDEA, I co-authored this report on atopic dermatitis in Mexico. The publication examines the multifaceted impact of the disease on patients’ quality of life, including physical discomfort, psychological effects, and social implications. It also highlights the disease’s economic burden, covering both direct medical costs and indirect costs. - -My responsibilities included designing the methodology and survey instruments, conducting interviews and data collection, and performing descriptive statistical analysis and data visualization (exclusively in Python). I also contributed to drafting and editing the report. - -To view an English executive summary, click [here](https://fundacionidea.org.mx/storage/IDEA/files/mxSAN005_DA_two%20pager%20ENG_%20250509.pdf). - -![Atopic dermatitis Fundación IDEA](images/atopicdermatitis.png){: style="max-width: 100%; height: auto; margin: 0.5rem 0 1rem;"} - -## Personal projects - -#### [DataCol](https://github.com/jballesterosc/datacol_backup/tree/main/_backup){:target="_blank"} -_2020 | Python_ - -A personal project to scrape and analyze data from COVID-19 reports in Colima, Mexico. The work involved data cleaning, visualization, and descriptive statistics to better understand the spread and impact of the virus across the state. - -A key milestone was receiving an award from the state government to support the development of a web application that visualized the data and provided real-time updates to the public. The final outcome was the full handover of the application to the Ministry of Health of Colima. - -Another takeaway is that I built this platform in the pre-ChatGPT era, so most of the code was written from scratch. This significantly strengthened my Python skills and my understanding of data analysis workflows. - - diff --git a/purgecss.config.js b/purgecss.config.js new file mode 100644 index 0000000..207a674 --- /dev/null +++ b/purgecss.config.js @@ -0,0 +1,27 @@ +module.exports = { + content: ["_site/**/*.html", "_site/**/*.js"], + css: ["_site/assets/css/*.css"], + output: "_site/assets/css/", + skippedContentGlobs: ["_site/assets/**/*.html"], + safelist: [ + "collapse", + "collapsing", + "show", + "dropdown-menu", + "dropdown-item", + "table", + "table-dark", + "table-hover", + "table-responsive", + "af-tooltip", + "af-popover", + "font-weight-bold", + "font-weight-medium", + "font-weight-lighter", + // medium-zoom injects these at runtime, so they never appear in the static + // HTML PurgeCSS scans; without them the zoom overlay's z-index rule is purged + // and page chrome (scroll-progress bar, ToC) bleeds through a zoomed image. + "medium-zoom-overlay", + "medium-zoom-image--opened", + ], +}; diff --git a/robots.txt b/robots.txt new file mode 100644 index 0000000..a450fbe --- /dev/null +++ b/robots.txt @@ -0,0 +1,7 @@ +--- +permalink: /robots.txt +--- +User-agent: * +Disallow: + +Sitemap: {{ site.baseurl | prepend: site.url }}/sitemap.xml