In this page, I will build out this blog, in a blog post. Kinda tripy.
I’m doing this by using solveit, a framework built by answer.ai. I won’t go through a full description and introduction of the platform : for that see the docs and the video. Long story short, it’s a framework for actively developing alongside an LLM.
I figured this could be an interesting way to work alongside an LLM for a seamless way to develop, learn and share my work with others. Even if no-one else reads it, it serves as a helpful way to document my learnings all in one place.
Initial Setup
Prompt 1 - Setup Advice
I want to develop a blog, where my solveit notebook are counted as blogposts. Thes blogposts will be a mix of things… sideprojects, paper reviews etc. I think this will involve using the ipynbs and a framework that converts these to a blog, hosted on a github pages site. I want this to be easy to set up and maintain. Can you walk me through the best way to go about this?
🤖Reply🤖
Great project! Converting Jupyter notebooks to a blog is a well-trodden path. Let me walk you through the best approach.
The most popular and well-maintained option is fastpages or its successor Quarto. I’d recommend Quarto since it’s actively maintained, has excellent notebook support, and works seamlessly with GitHub Pages.
Here’s why Quarto is ideal for your use case:
Converts .ipynb files directly to blog posts
Minimal configuration needed
Built-in support for code, math, citations
Great themes out of the box
Easy GitHub Pages deployment
Active development and community
Getting Started
Let’s break this into steps. First, let me confirm a few things:
Do you already have notebooks you want to convert, or are you starting fresh?
Do you have a GitHub account set up?
Are you comfortable running commands in your terminal, or would you prefer to do most setup through GitHub’s web interface?
Once I know your starting point, I can guide you through: - Installing Quarto locally (or using GitHub Actions to avoid local setup) - Creating the blog structure - Converting your solveit notebooks to posts - Setting up GitHub Pages - Customizing the look and feel
What’s your current setup like?
Prompt 2 - Setup Structure
I have a GitHub account and I’m comfortable with the terminal. I don’t currently have any notebooks to convert.
Walk me through setting up the blog structure?
🤖Reply🤖
Perfect! Let’s set up a Quarto blog from scratch.
Step 1: Install Quarto
First, install Quarto on your system. Visit https://quarto.org/docs/get-started/ and download the installer for your OS, or if you’re on macOS with Homebrew:
brew install quarto
After installation, verify it works:
quarto--version
Step 2: Create a new blog project
Navigate to where you want your blog folder, then create a new Quarto blog:
quarto create project blog my-blogcd my-blog
This creates a basic blog structure with example posts.
Step 3: Explore the structure
Take a look at what was created:
ls-la
You’ll see: - _quarto.yml - main configuration file - index.qmd - your blog’s home page - about.qmd - about page - posts/ - folder where your blog posts live - styles.css - custom styling
Step 4: Preview locally
Start a local preview server:
quarto preview
This will open your blog in a browser and auto-reload as you make changes.
Give these steps a try and let me know when you’re ready for the next part (customizing and adding notebook posts)!
Prompt 3 - Github clarity
Should I start with a github repo that I clone locally?
🤖Reply🤖
Yes, that’s a better approach! Let’s start with GitHub first.
Revised Setup:
Step 1: Create GitHub repository
Go to GitHub and create a new repository (e.g., my-blog). You can initialize it with a README or leave it empty.
Instead of quarto create project, we’ll initialize Quarto in the existing directory:
quarto create project blog .
The . tells Quarto to create the blog structure in the current directory.
Step 4: Preview locally
quarto preview
Step 5: Commit and push
git add .git commit -m"Initial Quarto blog setup"git push
This way, your blog is version-controlled from the start, which makes GitHub Pages deployment much smoother.
Have you created the GitHub repo yet, or would you like me to walk you through that part too?
Prompt 4 - Setup CI/CD
Okay, I now have the repo setup and cloned locally. How do I set up the CI/CD to deploy to github pages?
🤖Reply🤖
Great! Now let’s set up automatic deployment to GitHub Pages.
Step 1: Create GitHub Actions workflow
Create the workflow directory and file:
mkdir-p .github/workflows
Create .github/workflows/publish.yml with this content:
name: Publish Quarto Blogon:push:branches:[main]workflow_dispatch:permissions:contents: readpages: writeid-token: writejobs:build-deploy:runs-on: ubuntu-lateststeps:-name: Check out repositoryuses: actions/checkout@v4-name: Set up Quartouses: quarto-dev/quarto-actions/setup@v2-name: Render Quarto Projectuses: quarto-dev/quarto-actions/render@v2-name: Upload Pages artifactuses: actions/upload-pages-artifact@v3with:path: _site-name: Deploy to GitHub Pagesuses: actions/deploy-pages@v4
The workflow will run automatically on push. After a minute or two, your site should be live at https://YOUR-USERNAME.github.io/my-blog/
Let me know once you’ve pushed and I can help troubleshoot if needed!
Prompt 5 - Name change
Okay cool, that’s setup and successfully pushing to a github pages site.
I want to now start making some changes to the site.
First, the name isn’t great. I would prefer for this to be displayed like “Andrew Boney Blog”. How do I do that?
🤖Reply🤖
Easy fix! You need to edit the _quarto.yml configuration file.
Open _quarto.yml and look for the website section. You should see something like:
website:title:"my-blog"
Change it to:
website:title:"Andrew Boney Blog"
You can also add a subtitle if you want:
website:title:"Andrew Boney Blog"description:"Thoughts on side projects, paper reviews, and more"
Save the file, then preview locally to see the change:
quarto preview
Once you’re happy with it, commit and push:
git add _quarto.ymlgit commit -m"Update blog title"git push
The GitHub Action will rebuild and deploy automatically. Your site title should update in a minute or two!
Prompt 6 - Change descriptions
Cool, I’m doing that. I see a description: under website, although I can’t see this on the site itself. Where is the description actually visible/used?
🤖Reply🤖
Good question! The description field in _quarto.yml is primarily used for:
SEO metadata - Shows up in search engine results and social media previews (Open Graph/Twitter cards)
RSS feeds - If you enable an RSS feed for your blog
Site metadata - Used by crawlers and link previews
It’s not typically displayed on the site itself visibly. If you want a tagline or description that visitors actually see, you have a few options:
Option 1: Add to the navbar
website:title:"Andrew Boney Blog"description:"Your description here" # For metadatanavbar:left:-href: index.qmdtext: Home- about.qmdright:-text:"Side projects, paper reviews & experiments"
Option 2: Add to your homepage Edit index.qmd to add a subtitle or description at the top.
Option 3: Customize the listing page You can add a header section to your blog listing.
Which approach appeals to you? Or are you happy just having it for SEO purposes?
Prompt 7 - Change Templates
There’s some template posts already here. How do I delete them so that the blog is empty?
🤖Reply🤖
Simple - just delete the example post folders from the posts/ directory:
# Delete the example postsrm-rf posts/welcomerm-rf posts/post-with-code# (and any other example posts in there)
Or if you’re more comfortable in File Explorer on Windows, just navigate to the posts/ folder and delete the subdirectories.
After deleting, commit and push:
git add posts/git commit -m"Remove example posts"git push origin main
Your blog listing will now be empty and ready for your own posts!
When you’re ready to add your first post, just create a new folder in posts/ like posts/my-first-post/ and drop your .ipynb file in there.
Making Posts
Initial blog is now setup and working. At first I was doing this locally, but now I want to sync this with solveit so that I can easily convert any notebooks in here to posts on my blog.
Prompt 8 - Making Posts
Okay, now I want to make posts, using notebooks in this solveit instance (including this one). How would I do that?
🤖Reply🤖
Perfect! Here’s how to turn solveit notebooks into blog posts:
Step 1: Download Your Notebook
In solveit, you can download the current notebook as a .ipynb file. Look for a download or export option in the interface.
Step 2: Add Metadata to Your Notebook
Before adding it to your blog, you’ll want to add some front matter. Open the notebook and add a raw cell at the very top with YAML metadata:
---title:"Your Post Title"author:"Andrew Boney"date:"2026-01-12"categories:[code, analysis, paper-review]description:"A brief description of your post"---
Step 3: Add to Your Blog Repo
# Create a folder for your postmkdir posts/my-first-post# Copy your notebook into itcp /path/to/your-notebook.ipynb posts/my-first-post/index.ipynb# Commit and pushgit add posts/my-first-post/git commit -m"Add first blog post"git push origin main
Tips for solveit Notebooks
Any images or outputs in your notebook cells will be rendered automatically
Code cells will show with syntax highlighting
You can hide specific cells by adding #| echo: false at the top of a code cell
Add #| code-fold: true to make code collapsible
Want to try converting this current notebook into a post, or start with a fresh one?
Prompt 9 - Quarto in solveit
Okay, first I need to have quarto working in the same env as solveit, where so far I’ve been doing it locally in vscode. How would I do that?
🤖Reply🤖
Good point! You need Quarto installed in your solveit environment. Let’s install it:
Or if you want the latest version, you can check the latest release number at https://github.com/quarto-dev/quarto-cli/releases and update the URL accordingly.
After installation, you’ll be able to: - Run quarto preview to preview your blog - Run quarto render to build it - Work with your blog repo directly from solveit
Once installed, you can clone your blog repo into solveit:
Perfect! Quarto is installed and your blog repo is cloned. Now let’s set up a workflow to turn this current solveit notebook into a blog post.
First, let’s see what we’re working with:
!ls -la andrew_boney_blog/
Then, let’s create a folder for this post and export the current notebook:
import osfrom pathlib import Path# Create a folder for this postpost_dir = Path("andrew_boney_blog/posts/setup-blog")post_dir.mkdir(parents=True, exist_ok=True)print(f"Created: {post_dir}")
Now you need to save this current notebook. In solveit, you should be able to download or export the notebook as .ipynb. Once you have it, we can:
Copy it into the andrew_boney_blog/posts/setup-blog/ folder as index.ipynb
Preview it locally with quarto preview
Push to GitHub to publish
Do you see a way to export/download this notebook from solveit, or should we look for another approach?
!ls -la andrew_boney_blog/
total 108
drwxrwsr-x 7 solveit solveit 4096 Jan 12 13:52 .
drwxrwsr-x 6 solveit solveit 4096 Jan 12 13:56 ..
drwxrwsr-x 8 solveit solveit 4096 Jan 12 12:07 .git
drwxrwsr-x 3 solveit solveit 4096 Jan 12 11:47 .github
-rw-rw-r-- 1 solveit solveit 65 Jan 12 11:47 .gitignore
drwxrwsr-x 7 solveit solveit 4096 Jan 12 13:53 .quarto
-rw-rw-r-- 1 solveit solveit 425 Jan 12 11:47 _quarto.yml
drwxrwsr-x 4 solveit solveit 4096 Jan 12 13:49 _site
-rw-rw-r-- 1 solveit solveit 336 Jan 12 11:47 about.qmd
-rw-rw-r-- 1 solveit solveit 211 Jan 12 11:47 index.qmd
drwxrwsr-x 3 solveit solveit 4096 Jan 12 11:52 posts
-rw-rw-r-- 1 solveit solveit 60521 Jan 12 11:47 profile.jpg
-rw-rw-r-- 1 solveit solveit 17 Jan 12 11:47 styles.css
I can just move over with a cp command rather than downloading manually right? I’m gunna try that now
I now want to check what this looks like in quarto. Running quarto preview with the setup above allows me to host in a way that’s compatible through solveit, with the public url link (in this case https://wonderful-photon-jumps-lglx06.solve.it.com/)
!cd andrew_boney_blog && quarto preview --port 8000--host 0.0.0.0--no-browser
/bin/bash: line 1: cd: andrew_boney_blog: No such file or directory
Oh wow - This is cool. I can see how my notebook will look in the blog as I make changes to it.
It mostly looks good. I’m not happy with how the prompts look in the blog - they’re not clearly seperated between the prompt and response. I’ve gone above and added note headers before each prompt, which has helped a little, but it’s not great. but because the LLM response is rendered as HTML output in the notebook, any headers that the LLM response are will be treated as headers in the blog. This isn’t ideal : I could potentially fix by manually rendering the notebook e.g. so that the LLM response is in a code block, but this is a bit of a pain.
For now I’ll move on, but would like to deal with that if this blog goes anywhere.
Push to github
I now want to sync this with github, so that the blog will go live. This will require: - setting up SSH keys in solveit to allow git push. - copying this notebook again, so that the latest version is in the github repo. - git add / commit / push to github
… then the github actions workflow that I setup earlier should do the rest.
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: posts/setup-blog/index.ipynb
no changes added to commit (use "git add" and/or "git commit -a")
# Test SSH connection!ssh-T git@github.com# Push your changes!cd andrew_boney_blog &&git push origin main
The first time you connect, it will ask you to confirm the GitHub fingerprint - type “yes”.
Want to try generating the key first?
prompt 11 - debug
I’ve done this in a terminal, to avoid generating the key here in a way that would be publicly accessible.
I see something like this (where the key and art have been changed for protection).
solveit@d127dfaee6de:~$ ssh-keygen -t ed25519 -C “andrew.boney@hotmail.co.uk” -f ~/.ssh/id_ed25519 -N “” Generating public/private ed25519 key pair. /app/data/.ssh/id_ed25519 already exists. Overwrite (y/n)? y Your identification has been saved in /app/data/.ssh/id_ed25519 Your public key has been saved in /app/data/.ssh/id_ed25519.pub The key fingerprint is: SHA256:… andrew.boney@hotmail.co.uk The key’s randomart image is: +–[…]–+ … +—-[SHA256]—–+
I notice in github it prompts in the Key box ‘Begins with “ssh-rsa”’… with a few other options given, none of which match the key I’ve generated which begins with SHA256. Is this going to work?
🤖Reply🤖
Good catch! You’re looking at the wrong part of the output. The fingerprint (SHA256:…) is not what you paste into GitHub.
You need to paste the public key itself, which is in the .pub file. Run this:
That entire line (starting with ssh-ed25519) is what you paste into GitHub’s “Key” box. The ssh-ed25519 format is one of the valid options GitHub accepts (along with ssh-rsa, ssh-dss, etc.).
The SHA256 fingerprint you saw is just a verification hash - you don’t use that for GitHub.
Try displaying your public key with the command above and paste that into GitHub!
For context, I had to do one final rerun of the copy step so that the latest version of this notebook (including what I’m currently writing) was in the github repo. In the future I’ll write in the index.ipynb file directly.