diff --git a/.claude/settings.local.json b/.claude/settings.local.json index d3259e7..21fd6d8 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -2,7 +2,11 @@ "permissions": { "allow": [ "Bash(npx tailwindcss:*)", - "Bash(npm install)" + "Bash(npm install)", + "Bash(grep -E \"\\\\.\\(html|css|js|yml|json|scss\\)$\")", + "Bash(grep:*)", + "Bash(wc -l /Users/andrea/Developer/mrandri19.github.io/_posts/*.md)", + "Bash(find:*)" ] } } diff --git a/.github/workflows/jekyll.yml b/.github/workflows/jekyll.yml index de4a208..0920589 100644 --- a/.github/workflows/jekyll.yml +++ b/.github/workflows/jekyll.yml @@ -1,56 +1,34 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. - -# Sample workflow for building and deploying a Jekyll site to GitHub Pages -name: Deploy Jekyll site to Pages +name: Deploy Astro site to Pages on: - # Runs on pushes targeting the default branch push: branches: ["master"] - - # Allows you to run this workflow manually from the Actions tab workflow_dispatch: -# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages permissions: contents: read pages: write id-token: write -# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued. -# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete. concurrency: group: "pages" cancel-in-progress: false jobs: - # Build job build: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 - - name: Setup Ruby - uses: ruby/setup-ruby@v1 + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '20' + cache: 'npm' + - run: npm ci + - run: npx astro build + - uses: actions/upload-pages-artifact@v3 with: - ruby-version: '3.1' - bundler-cache: true - - name: Setup Pages - id: pages - uses: actions/configure-pages@v4 - - name: Build with Jekyll - # Outputs to the './_site' directory by default - run: bundle exec jekyll build --baseurl "${{ steps.pages.outputs.base_path }}" - env: - JEKYLL_ENV: production - - name: Upload artifact - # Automatically uploads an artifact from the './_site' directory by default - uses: actions/upload-pages-artifact@v3 + path: ./dist - # Deployment job deploy: environment: name: github-pages diff --git a/.gitignore b/.gitignore index 1fc9591..79f3090 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ -_site -.sass-cache -.jekyll-metadata +dist/ +.astro/ +node_modules/ .vscode -node_modules/ \ No newline at end of file +_site/ diff --git a/404.html b/404.html deleted file mode 100644 index c472b4e..0000000 --- a/404.html +++ /dev/null @@ -1,24 +0,0 @@ ---- -layout: default ---- - - - -
-

404

- -

Page not found :(

-

The requested page could not be found.

-
diff --git a/Gemfile b/Gemfile deleted file mode 100644 index feff040..0000000 --- a/Gemfile +++ /dev/null @@ -1,9 +0,0 @@ -source "https://rubygems.org" - -# This is the default theme for new Jekyll sites. You may change this to anything you like. -gem "minima", "~> 2.5.1" - -# If you want to use GitHub Pages, remove the "gem "jekyll"" above and -# uncomment the line below. To upgrade, run `bundle update github-pages`. -gem "github-pages", group: :jekyll_plugins - diff --git a/Gemfile.lock b/Gemfile.lock deleted file mode 100644 index 39499a2..0000000 --- a/Gemfile.lock +++ /dev/null @@ -1,287 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - activesupport (6.0.4.4) - concurrent-ruby (~> 1.0, >= 1.0.2) - i18n (>= 0.7, < 2) - minitest (~> 5.1) - tzinfo (~> 1.1) - zeitwerk (~> 2.2, >= 2.2.2) - addressable (2.8.0) - public_suffix (>= 2.0.2, < 5.0) - coffee-script (2.4.1) - coffee-script-source - execjs - coffee-script-source (1.11.1) - colorator (1.1.0) - commonmarker (0.17.13) - ruby-enum (~> 0.5) - concurrent-ruby (1.1.9) - dnsruby (1.61.7) - simpleidn (~> 0.1) - em-websocket (0.5.3) - eventmachine (>= 0.12.9) - http_parser.rb (~> 0) - ethon (0.15.0) - ffi (>= 1.15.0) - eventmachine (1.2.7) - execjs (2.8.1) - faraday (1.9.3) - faraday-em_http (~> 1.0) - faraday-em_synchrony (~> 1.0) - faraday-excon (~> 1.1) - faraday-httpclient (~> 1.0) - faraday-multipart (~> 1.0) - faraday-net_http (~> 1.0) - faraday-net_http_persistent (~> 1.0) - faraday-patron (~> 1.0) - faraday-rack (~> 1.0) - faraday-retry (~> 1.0) - ruby2_keywords (>= 0.0.4) - faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) - faraday-excon (1.1.0) - faraday-httpclient (1.0.1) - faraday-multipart (1.0.3) - multipart-post (>= 1.2, < 3) - faraday-net_http (1.0.1) - faraday-net_http_persistent (1.2.0) - faraday-patron (1.0.0) - faraday-rack (1.0.0) - faraday-retry (1.0.3) - ffi (1.15.5) - forwardable-extended (2.6.0) - gemoji (3.0.1) - github-pages (223) - github-pages-health-check (= 1.17.9) - jekyll (= 3.9.0) - jekyll-avatar (= 0.7.0) - jekyll-coffeescript (= 1.1.1) - jekyll-commonmark-ghpages (= 0.1.6) - jekyll-default-layout (= 0.1.4) - jekyll-feed (= 0.15.1) - jekyll-gist (= 1.5.0) - jekyll-github-metadata (= 2.13.0) - jekyll-include-cache (= 0.2.1) - jekyll-mentions (= 1.6.0) - jekyll-optional-front-matter (= 0.3.2) - jekyll-paginate (= 1.1.0) - jekyll-readme-index (= 0.3.0) - jekyll-redirect-from (= 0.16.0) - jekyll-relative-links (= 0.6.1) - jekyll-remote-theme (= 0.4.3) - jekyll-sass-converter (= 1.5.2) - jekyll-seo-tag (= 2.7.1) - jekyll-sitemap (= 1.4.0) - jekyll-swiss (= 1.0.0) - jekyll-theme-architect (= 0.2.0) - jekyll-theme-cayman (= 0.2.0) - jekyll-theme-dinky (= 0.2.0) - jekyll-theme-hacker (= 0.2.0) - jekyll-theme-leap-day (= 0.2.0) - jekyll-theme-merlot (= 0.2.0) - jekyll-theme-midnight (= 0.2.0) - jekyll-theme-minimal (= 0.2.0) - jekyll-theme-modernist (= 0.2.0) - jekyll-theme-primer (= 0.6.0) - jekyll-theme-slate (= 0.2.0) - jekyll-theme-tactile (= 0.2.0) - jekyll-theme-time-machine (= 0.2.0) - jekyll-titles-from-headings (= 0.5.3) - jemoji (= 0.12.0) - kramdown (= 2.3.1) - kramdown-parser-gfm (= 1.1.0) - liquid (= 4.0.3) - mercenary (~> 0.3) - minima (= 2.5.1) - nokogiri (>= 1.12.5, < 2.0) - rouge (= 3.26.0) - terminal-table (~> 1.4) - github-pages-health-check (1.17.9) - addressable (~> 2.3) - dnsruby (~> 1.60) - octokit (~> 4.0) - public_suffix (>= 3.0, < 5.0) - typhoeus (~> 1.3) - html-pipeline (2.14.0) - activesupport (>= 2) - nokogiri (>= 1.4) - http_parser.rb (0.8.0) - i18n (0.9.5) - concurrent-ruby (~> 1.0) - jekyll (3.9.0) - addressable (~> 2.4) - colorator (~> 1.0) - em-websocket (~> 0.5) - i18n (~> 0.7) - jekyll-sass-converter (~> 1.0) - jekyll-watch (~> 2.0) - kramdown (>= 1.17, < 3) - liquid (~> 4.0) - mercenary (~> 0.3.3) - pathutil (~> 0.9) - rouge (>= 1.7, < 4) - safe_yaml (~> 1.0) - jekyll-avatar (0.7.0) - jekyll (>= 3.0, < 5.0) - jekyll-coffeescript (1.1.1) - coffee-script (~> 2.2) - coffee-script-source (~> 1.11.1) - jekyll-commonmark (1.3.1) - commonmarker (~> 0.14) - jekyll (>= 3.7, < 5.0) - jekyll-commonmark-ghpages (0.1.6) - commonmarker (~> 0.17.6) - jekyll-commonmark (~> 1.2) - rouge (>= 2.0, < 4.0) - jekyll-default-layout (0.1.4) - jekyll (~> 3.0) - jekyll-feed (0.15.1) - jekyll (>= 3.7, < 5.0) - jekyll-gist (1.5.0) - octokit (~> 4.2) - jekyll-github-metadata (2.13.0) - jekyll (>= 3.4, < 5.0) - octokit (~> 4.0, != 4.4.0) - jekyll-include-cache (0.2.1) - jekyll (>= 3.7, < 5.0) - jekyll-mentions (1.6.0) - html-pipeline (~> 2.3) - jekyll (>= 3.7, < 5.0) - jekyll-optional-front-matter (0.3.2) - jekyll (>= 3.0, < 5.0) - jekyll-paginate (1.1.0) - jekyll-readme-index (0.3.0) - jekyll (>= 3.0, < 5.0) - jekyll-redirect-from (0.16.0) - jekyll (>= 3.3, < 5.0) - jekyll-relative-links (0.6.1) - jekyll (>= 3.3, < 5.0) - jekyll-remote-theme (0.4.3) - addressable (~> 2.0) - jekyll (>= 3.5, < 5.0) - jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) - rubyzip (>= 1.3.0, < 3.0) - jekyll-sass-converter (1.5.2) - sass (~> 3.4) - jekyll-seo-tag (2.7.1) - jekyll (>= 3.8, < 5.0) - jekyll-sitemap (1.4.0) - jekyll (>= 3.7, < 5.0) - jekyll-swiss (1.0.0) - jekyll-theme-architect (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-cayman (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-dinky (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-hacker (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-leap-day (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-merlot (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-midnight (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-minimal (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-modernist (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-primer (0.6.0) - jekyll (> 3.5, < 5.0) - jekyll-github-metadata (~> 2.9) - jekyll-seo-tag (~> 2.0) - jekyll-theme-slate (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-tactile (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-theme-time-machine (0.2.0) - jekyll (> 3.5, < 5.0) - jekyll-seo-tag (~> 2.0) - jekyll-titles-from-headings (0.5.3) - jekyll (>= 3.3, < 5.0) - jekyll-watch (2.2.1) - listen (~> 3.0) - jemoji (0.12.0) - gemoji (~> 3.0) - html-pipeline (~> 2.2) - jekyll (>= 3.0, < 5.0) - kramdown (2.3.1) - rexml - kramdown-parser-gfm (1.1.0) - kramdown (~> 2.0) - liquid (4.0.3) - listen (3.7.0) - rb-fsevent (~> 0.10, >= 0.10.3) - rb-inotify (~> 0.9, >= 0.9.10) - mercenary (0.3.6) - mini_portile2 (2.8.0) - minima (2.5.1) - jekyll (>= 3.5, < 5.0) - jekyll-feed (~> 0.9) - jekyll-seo-tag (~> 2.1) - minitest (5.15.0) - multipart-post (2.1.1) - nokogiri (1.13.3) - mini_portile2 (~> 2.8.0) - racc (~> 1.4) - octokit (4.21.0) - faraday (>= 0.9) - sawyer (~> 0.8.0, >= 0.5.3) - pathutil (0.16.2) - forwardable-extended (~> 2.6) - public_suffix (4.0.6) - racc (1.6.0) - rb-fsevent (0.11.0) - rb-inotify (0.10.1) - ffi (~> 1.0) - rexml (3.2.5) - rouge (3.26.0) - ruby-enum (0.9.0) - i18n - ruby2_keywords (0.0.5) - rubyzip (2.3.2) - safe_yaml (1.0.5) - sass (3.7.4) - sass-listen (~> 4.0.0) - sass-listen (4.0.0) - rb-fsevent (~> 0.9, >= 0.9.4) - rb-inotify (~> 0.9, >= 0.9.7) - sawyer (0.8.2) - addressable (>= 2.3.5) - faraday (> 0.8, < 2.0) - simpleidn (0.2.1) - unf (~> 0.1.4) - terminal-table (1.8.0) - unicode-display_width (~> 1.1, >= 1.1.1) - thread_safe (0.3.6) - typhoeus (1.4.0) - ethon (>= 0.9.0) - tzinfo (1.2.9) - thread_safe (~> 0.1) - unf (0.1.4) - unf_ext - unf_ext (0.0.8) - unicode-display_width (1.8.0) - zeitwerk (2.5.3) - -PLATFORMS - ruby - -DEPENDENCIES - github-pages - minima (~> 2.5.1) - -BUNDLED WITH - 2.1.4 diff --git a/README.md b/README.md index fec3089..2ae7508 100644 --- a/README.md +++ b/README.md @@ -2,32 +2,21 @@ ## Building -### Blog +### Development ```shell -# Use rvm to install ruby2.7.3 (needed for jekyll 3.9, which is required by github-pages 219) -rvm install 2.7.3 -# Set ruby2.7.3 as default -rvm --default 2.7.3 -# Use ruby2.7.3 in this shell -rvm use 2.7.3 - -cd mrandri19.github.io -# Download dependencies described in Gemfile and update Gemfile.lock -bundle install -# Serve the website, reloading on changes -bundle exec jekyll serve --livereload +npm install +npm run dev ``` -### Homepage +### Production build ```shell -# install tailwindcss (needed only once) -npm i tailwindcss -# rebuild the css on changes -npx tailwindcss -i index-style.css -o index-style.out.css --watch +npm run build ``` +Output goes to `./dist/`. + ### Converting notebooks to markdown ```shell @@ -39,21 +28,3 @@ pandoc \ --extract-media=assets/images/introduction-to-variational-inference \ 05-introduction-to-variational-inference.ipynb ``` - -### Installing ruby and running bundle on ARM64 macs - -```shell -brew install openssl@1.1 - -export PATH="$(brew --prefix)/opt/openssl@1.1/bin:$PATH" -export LDFLAGS="-L$(brew --prefix)/opt/openssl@1.1/lib" -export CPPFLAGS="-I$(brew --prefix)/opt/openssl@1.1/include" -export PKG_CONFIG_PATH="$(brew --prefix)/opt/openssl@1.1/lib/pkgconfig" - -rvm autolibs disable - -export RUBY_CFLAGS=-DUSE_FFI_CLOSURE_ALLOC -export optflags="-Wno-error=implicit-function-declaration" - -rvm install 2.7.3 --with-openssl-dir=$(brew --prefix)/opt/openssl@1.1 -``` diff --git a/WORK.md b/WORK.md new file mode 100644 index 0000000..56cae73 --- /dev/null +++ b/WORK.md @@ -0,0 +1,81 @@ +# Jekyll → Astro Migration + +Executed the migration plan at `.claude/plans/indexed-weaving-wreath.md` on 2026-04-06. + +## What was done + +### Step 1 — Astro scaffold + +- Created `astro.config.mjs` with static output, `build.format: 'file'`, Shiki dual-theme (catppuccin-latte/catppuccin-mocha), remark-math + rehype-katex plugins, and Tailwind integration +- Created `tailwind.config.mjs` (replaces `tailwind.config.js`) with updated content paths, `darkMode: 'media'`, and `@tailwindcss/typography` plugin +- Created `tsconfig.json` extending `astro/tsconfigs/strict` +- Updated `package.json` with Astro and all dependencies (`astro`, `@astrojs/tailwind`, `@astrojs/rss`, `@tailwindcss/typography`, `remark-math`, `rehype-katex`, `katex`) +- Created `src/content/config.ts` — content collection schema (title, author?, draft?) +- Created `src/styles/global.css` — Tailwind directives, Source Serif Pro `@font-face`, Shiki dark/light CSS variable overrides +- Moved assets to `public/`: `assets/images/`, `assets/js/`, `assets/pdf/`, `index-images/`, `Source_Serif_Pro/`, `Source_Sans_Pro/`, favicons, `manifest.json`, `site.webmanifest`, `hes_my_quant.pdf` + +### Step 2 — Layouts + +- `src/layouts/BaseLayout.astro` — shared HTML shell with title prop, favicons, GA4 analytics, dark mode body classes (`bg-white dark:bg-gray-900`) +- `src/layouts/PostLayout.astro` — extends BaseLayout; blog header nav (Blog/Homepage links), KaTeX CSS link in head, `
` wrapper, post title and formatted date + +### Step 3 — Homepage + +- `src/pages/index.astro` — identical HTML content to the original `index.html`, using BaseLayout for the shell. Homepage-specific CSS (section margins, clearfix, bullet styling) moved to an Astro ` diff --git a/src/styles/global.css b/src/styles/global.css new file mode 100644 index 0000000..5cfeee0 --- /dev/null +++ b/src/styles/global.css @@ -0,0 +1,27 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@font-face { + font-family: "Source Serif Pro"; + src: url('/Source_Serif_Pro/SourceSerif4-Regular.ttf') format('truetype'); +} + +/* Shiki dual-theme: light by default, dark via media query */ +.astro-code, +.astro-code span { + color: var(--shiki-light) !important; + background-color: var(--shiki-light-bg) !important; + font-style: var(--shiki-light-font-style) !important; + font-weight: var(--shiki-light-font-weight) !important; +} + +@media (prefers-color-scheme: dark) { + .astro-code, + .astro-code span { + color: var(--shiki-dark) !important; + background-color: var(--shiki-dark-bg) !important; + font-style: var(--shiki-dark-font-style) !important; + font-weight: var(--shiki-dark-font-weight) !important; + } +} diff --git a/tailwind.config.js b/tailwind.config.mjs similarity index 78% rename from tailwind.config.js rename to tailwind.config.mjs index f340f93..c6f42a1 100644 --- a/tailwind.config.js +++ b/tailwind.config.mjs @@ -1,9 +1,10 @@ +import typography from '@tailwindcss/typography'; + const scalingfactor = 1.2; -module.exports = { - content: [ - "index.html", - "index-style.css" - ], + +export default { + content: ['./src/**/*.{astro,html,md,mdx}'], + darkMode: 'media', theme: { extend: {}, fontSize: { @@ -21,5 +22,5 @@ module.exports = { 'serif': "'Source Serif Pro', serif" } }, - plugins: [], + plugins: [typography], } diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..bcbf8b5 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "astro/tsconfigs/strict" +}