Claude Code (Part 8)
Neil Haddley • February 1, 2026
Building a Scheme-like LISP interpreter with a Jupyter-style notebook UI in pure HTML/CSS/JS — guided entirely by Claude Code from first prompt to deployed app
AI isn't just a helper for me—it’s a core part of my development toolkit. By using tools like Claude Code and ChatGPT to write, debug, and understand code in Python, JavaScript, C#, Business Central AL, and C++, I’ve turned AI into a versatile collaborator across every language I work with.
One way to think about it is as a pair programmer — a virtual coding partner that never tires. This isn't about automating the developer away; it's about augmenting their capabilities.
Building a LISP Notebook
To demonstrate this, I built a Scheme-like LISP interpreter with a Jupyter-style notebook UI, entirely in vanilla HTML/CSS/JS with no dependencies — guided by Claude Code from first prompt to deployed app.
Try it yourself: open the LISP Notebook in a new tab and run the code described in this post as you read along.
Planning the build
I started by asking Claude what it needed to know:
PROMPT
1I would like to create a web page LISP Interpreter. Do you have any questions?
Claude asked a series of clarifying questions to nail down the design:
With the requirements settled, Claude researched the best approach:
Claude then drafted a full implementation plan:
Building and running
Claude created the project structure and I opened it with Live Server:
Adding tests
PROMPT
1How can we add unit tests and integration tests?
Claude proposed using Jest and began setting up the test suite:
Initialising CLAUDE.md
PROMPT
1/init
Deploying to Azure
PROMPT
1How do I ensure that this code is deployed to Azure everytime it is pushed to github (assuming that the tests pass)?
Claude created the GitHub Actions workflow:
I created the Static Web App resource in the Azure portal:
I connected the Azure deployment token to GitHub Actions:
Making a change end-to-end
To verify the full pipeline, I asked Claude to update the accent colours:
PROMPT
1update --accent and --accent-hover colors to be brighter
Try it yourself
The section above walks through deploying the notebook to an Azure Static Web App, and that pipeline works well. For the version linked from this blog, though, I took a simpler route that costs nothing extra. Because the interpreter is just a folder of static HTML, CSS, and JavaScript with no build step and no dependencies, I pushed it to its own GitHub repository, Haddley/lisp, and switched on GitHub Pages for that repository.
GitHub serves a project repository's Pages site as a path under the account's user site, so Haddley/lisp is published at haddley.github.io/lisp — a sibling of this blog rather than part of it. The two are independent GitHub Pages deployments that happen to share the haddley.github.io domain. There is no separate hosting resource to create, no deployment token to wire up, and no second CI workflow to maintain — pushing to the lisp repository is the whole deployment step.
Open haddley.github.io/lisp in a new tab and work through the expressions from this post — the first expression, the factorial function, and the deliberate error — to see the tokeniser, parser, and evaluator in action.





















































