Week 1
Gitlab setup
Using WSL with ubuntu 20.04.6.
Created a directory for my work
[:~]$ mkdir fablab2025
cd fablab2025
Setup Git:
git config --global user.name edward-woodhouse
git config --global user.email edward.woodhouse@gmail.com
Generate SSH key and check it
ssh-keygen -t rsa -C "my_email@mail.com"
nedit ~/.ssh/id_rsa.pub
Copy the generated SSH key and add it to profile on gitlab.fabcloud.org.
xclip -sel clip < ~/.ssh/id_rsa.pub
Go to edit profile in gitlab profile:

Then SSH keys and “Add new key”:

Once this is done it time to clone the git files locally
git clone git@gitlab.fabcloud.org:academany/fabacademy/2025/labs/barcelona/students/edward-woodhouse.git
The making of a Web Journal
The philosophy adopted for making this website is finding a wonderful website created by a previous student at fab academy, copy the layout and appropriate it.
Creating the WSL environment
I created a new work directory to build my website
mkdir week1
cd week1
mkdir test
cd test
touch index.html bio.html projects.html assignments.html style.css
mkdir images assignemnts projects
I then initialised this workspace as the git local directory with the command
git init
Appropriating a Web page
I then added an image from my cycling trip in Taiwan as taiwanjungleroad.jpg to the images folder to be used as a background for the index page.
I decided to find a layout I liked from past students. I chose Manuela’s site to use as a template. I used the following bash command to copy the webpage to my local computer:
wget -r -np -k -p https://fabacademy.org/2023/labs/barcelona/students/manuela-reyes/
This line of code is incredibly powerful and allowed me to read all of the html, css and js files.
Using AI tools
As my knowledge of html, javascript and css is complete novice, I decided to use AI models to aid in the endeavour.
First I ask Grok AI :
What is the best AI for coding websites ?
When it comes to coding websites in 2025, the "best" AI tool depends on your specific needs—whether you prioritize speed, code quality, integration with your workflow, or specialized features like front-end design translation. Based on the latest insights and trends, here are some top contenders that stand out for website development:
- CursorCursor is a highly regarded AI-powered code editor that’s built from the ground up with coding assistance in mind. It excels at generating clean, context-aware code and integrates seamlessly with modern web development workflows. Developers praise its ability to handle complex projects, debug efficiently, and suggest improvements, making it ideal for crafting websites with languages like HTML, CSS, JavaScript, and frameworks like React or Next.js. Its strength lies in maintaining control over your codebase while offering real-time suggestions, which is perfect for both solo developers and teams working on scalable web projects.
- GitHub CopilotA veteran in the AI coding space, GitHub Copilot remains a powerhouse for website development. Powered by OpenAI’s models, it provides real-time code suggestions as you type, excelling in languages like JavaScript, Python (for back-end), and TypeScript. It’s particularly effective for quickly scaffolding web apps, generating boilerplate code, and integrating with popular IDEs like VS Code. While it’s not as cutting-edge as some newer tools, its reliability and broad language support make it a go-to for many web developers.
- Windsurf by CodeiumWindsurf is gaining traction as an innovative AI coding agent that can scaffold entire web applications—including front-end and back-end components—through natural language prompts. It’s especially useful for rapid prototyping of Next.js apps or full-stack websites with databases and authentication. Developers highlight its intuitive interface and ability to handle end-to-end website creation, making it a strong choice if you want to go from concept to functional site quickly.
- Divi AIIf you’re focused on WordPress-based websites, Divi AI is a standout. It’s tailored for the Divi ecosystem, generating CSS, HTML, and JavaScript that integrates perfectly with Divi modules. It can build entire sites from prompts, customize modules, and even handle design-to-code tasks. This makes it an excellent pick for developers or designers who want to create polished WordPress sites without deep coding expertise, though it’s less versatile outside that niche.
- Visual CopilotFor front-end developers, Visual Copilot shines by converting Figma designs directly into code for frameworks like React, Vue, or HTML with Tailwind CSS. It’s a game-changer if your workflow involves turning mockups into responsive web interfaces fast. Its ability to map components and adapt to existing design systems makes it a top choice for design-heavy website projects.
Which One’s Best for You?
- For general web development with flexibility: Cursor or GitHub Copilot. They’re versatile, integrate with most IDEs, and handle both front-end and back-end coding well.
- For rapid full-stack prototyping: Windsurf. It’s unmatched for spinning up complete websites quickly.
- For WordPress sites: Divi AI. It’s purpose-built for that platform.
- For design-to-code workflows: Visual Copilot. Perfect for translating UI designs into functional web code.
Each of these tools has been praised for boosting productivity and reducing manual coding time, with Cursor and Windsurf often noted for pushing the boundaries of AI-driven development in 2025. If you’re after a recommendation without much context, Cursor is a safe bet—it’s widely applicable and highly effective for most website coding tasks. Want to narrow it down further? Tell me more about your project or preferences!
I do like cursor but it uses AI models. You can select chat gpt 4, claude-bonnet. I could also use grok. Which AI model is best for it ?
When it comes to picking the best AI model for Cursor in 2025, it really depends on what you’re aiming to do with your website coding—Cursor supports a range of models like GPT-4o, Claude 3.5 Sonnet, and even Grok, each with its own strengths. Since you mentioned liking Cursor and considering GPT-4, Claude (I assume you meant Claude 3.5 Sonnet, not "Claude-Bonnet"), and Grok, let’s break down how these stack up for web development tasks based on their capabilities and how they play with Cursor’s features.
Claude 3.5 Sonnet
- Why It’s Great for Cursor: Claude 3.5 Sonnet is Cursor’s default model for a reason—it’s a beast at coding, especially for web projects. It’s known for producing accurate, context-aware code with a massive 200K token context window, which means it can keep track of your entire codebase without losing the plot. Developers love it for its nuanced understanding, making it ideal for complex front-end frameworks like React or back-end logic in Node.js. In Cursor, its integration shines through features like Composer, where it can scaffold entire apps from a single prompt, and its debugging is top-notch.
- Web Coding Edge: It excels at generating clean, modern HTML, CSS, and JavaScript, often aligning with current best practices. If you’re refactoring a messy web app or building something intricate, Claude’s reasoning keeps it ahead.
- Downsides: It’s a paid option in Cursor (Pro plan starts at $20/month), and it doesn’t search the web for real-time info, so you’re relying on its training data (which is still very fresh as of 2025).
GPT-4o (ChatGPT 4)
- Why It’s Great for Cursor: GPT-4o from OpenAI is a versatile all-rounder, and in Cursor, it’s a solid pick for quick prototyping and broad language support. It’s fast, handles HTML/CSS/JavaScript well, and can even tackle trickier web tasks like integrating APIs or writing TypeScript. Cursor’s autocomplete (Tab feature) and chat integration make GPT-4o feel snappy for smaller edits or generating boilerplate code.
- Web Coding Edge: It’s fantastic for rapid iteration—think spitting out a landing page or tweaking a CSS grid in seconds. Plus, it can search the web (in some contexts outside Cursor), keeping it slightly more current than Claude.
- Downsides: Its context window is smaller than Claude’s (128K tokens), so it might struggle with huge web projects where you need to reference tons of code at once. Some devs find it less precise for coding compared to Claude, occasionally requiring more tweaks.
Grok (xAI)
- Why It’s Great for Cursor: Grok, built by xAI, is a wildcard—it’s newer, quirky, and designed to give straightforward, practical answers. In Cursor, it’s available as an option (you’d need an xAI API key or subscription), and it’s decent for simpler web tasks like generating HTML layouts or basic JavaScript functions. It’s fast and lean, which can be a plus for lightweight projects.
- Web Coding Edge: Grok’s strength is its no-nonsense approach, which can cut through fluff and get you functional code quickly. It’s also got a knack for up-to-date info since it can tap into recent data, which might help with the latest web APIs or libraries.
- Downsides: It’s not as mature as Claude or GPT-4o for coding. Its reasoning isn’t as deep, and it might trip over complex web frameworks or large-scale refactors. In Cursor, it’s less optimized compared to the defaults, so you might not get the same seamless experience.
What’s Best for Coding Websites in Cursor?
- Claude 3.5 Sonnet is the champ for most web development scenarios in Cursor. Its precision, context handling, and integration with Cursor’s tools (like codebase-aware chat and Composer) make it the go-to for anything from a sleek portfolio site to a full-stack web app. Posts on X and developer forums consistently rate it as the top performer for coding in Cursor, especially for accuracy and complexity—like refactoring a React app or debugging a CSS nightmare.
- GPT-4o is a close second if you want speed and flexibility. It’s perfect for banging out quick prototypes or iterating on a design-heavy site, but it might need more hand-holding for bigger projects.
- Grok lags behind for now. It’s fine for basic web stuff, but it’s not the best fit for Cursor’s advanced features or heavy-duty coding tasks. It’s more of a fun alternative if you’re experimenting or keeping things simple.
Recommendation
Stick with Claude 3.5 Sonnet in Cursor for website coding—it’s the most reliable and powerful option today, especially for leveraging Cursor’s AI-driven workflow. If budget’s a concern (since Claude requires a Pro subscription), GPT-4o is a solid fallback and still gets the job done for most web tasks. Grok’s worth a try if you’re curious or already hooked into the xAI ecosystem, but it’s not the leader here. Want to tell me more about your project? I can fine-tune the advice!
Cursor with claude-bonnet it is. The trial version allows 15 days of free use with 1500 questions to claude-bonnet.
Through a barrage of prompts, exchanges and interactions with claude-3.5-sonnet on Cursor AI I was able to reposition text, headers, footers, assignment girds, page layouts and clean up both the code and the aesthetics of the website.
At the end of my exchanges once I was happy with the results I used a prompt to create a file with the history of our exchanges: the result is the following containing only my prompts as the resulting text on the chat was too difficult to retrieve. It is also somewhat incomplete, more frequent screen shots are required for an accurate traceability:
# Website Development Conversation - Fab Academy 2025
Date: February 2024
Last Updated: [Current Date]
## Development Timeline and Requests
### 1. Initial Setup and Structure
- "I would like the index header and footer to be applied to all pages"
- "i'd also like the footer on projectmanagement.html"
### 2. Projects Page Development
- "I want to move the project page to a sub index page, with a similar layout to the bio page, with the ./images/interests.svg on the left and the current text on the right of it"
- "Above the image I would like to add some text as an explanation: 'I noted down some of my key interests...'"
- "If you could add a legend to the image, 'Figure 1: idea brainstorming cloud'"
- "I should modify the explanationary text so that it is more formal, creative and from the third person. If you could also make it fit better on the page"
### 3. Koji Fermentation Page Creation
- "I'd like to add a link to a page for the Koji fermentation Control System..."
- "You can remove the repeated text from the Projects.html as it now has it's own specific page"
- "I'd like to add the Project Goal 'koji-section' to the top of the page"
- "I'm now happy with the koji page, it looks great. Maybe underline the title"
### 4. Koji Page Enhancement
- "I'd like to add the png ./image/kojifermplant.png to the Koji Fermentation Control System page..."
- "Could you put the page into two columns so it is more readable please"
- "No, it was more the entire text to be split into two columns..."
- "when the browser is fully opened I'd like the columns to use more of the page. it is too narrow"
- "The additional applications should also be a koji-method class"
- "A little less sales person. A simple concise informative visually appealling text"
### 5. Documentation Requests
- "thanks you have been a great help"
- "can I export our interactions on this chat to a text file please?"
- "can you copy all of the history from this chat and put it in a text file please"
- "what have you named the file and where have you placed it?"
- "yes please, I want you to provide the full conversation content..."
- [Various confirmations: "yes", "yes please", "1"]
- "is this file true to our history? Can you propose what I need to add..."
- "Could you mofify the file so it only includes the questions that I asked"
- "I would like you to include them all here"
- "do what you think is best for traceability and ease of lecture"
## Notes
- Each request represents a significant development step in the website creation
- Requests are grouped by related functionality and purpose
- The timeline shows the natural progression from basic structure to refined design
- Documentation requests show the process of creating this record
Would you like me to:
1. Add the corresponding responses to each request?
2. Include code snippets for each implementation?
3. Add more detailed context for each section?
In order to make the journaling experience as smooth as possible I decided to use a third-party tool for journaling : notion.
Note taking with Notion
Once I tried notion I knew I wanted to use this for the weekly notes. I can simply export the notion page in html format to be added to my weekly assignment page.

Once exported, the assignements.html file uses the iframe command to directly link the exported html file to the webpage:
<main class="assignment-content">
<!-- 🔥 This iframe automatically loads your Notion export -->
<section class="week-content-blog">
<iframe src="./notion/notion-week1.html" width="100%" height="800px" style="border:none;"></iframe>
</section>
</main>
This will be repeated for each week, where a new photo will be added to assignments.html page grid.
Using Git
I made regular commits on my local git environment. However, I tried to copy the folders into the clone git environment and push it to the remote server. This did not deploy at the first attempt as it was missing the “public” folder. All the website files were moved into this directory and the site was successfully deployed.
The process for pushing modified code to the remote server is as follows :
git add .
git commit -m "explanation of the modification between previous and present commit"
git push
The site is now successfully deployed on https://fabacademy.org/2025/labs/barcelona/students/edward-woodhouse/index.html
Improving the website
I came back to the website several times to improve the structure and workflow to add weekly updates to the project and weekly assignment pages. I burnt through 2 email accounts equating to over 3000 prompts! In the end this was an incredible learning experience through trial and error.
The first version of my website was pure html with one css file for all of the webpages (index, assignments, projects, …). It differed greatly from Manuela’s website that was copied initially. It did however require copying the code for the header and the drop bar menu’s for each new page created. This isn’t optimal considering a page will be added each week and also when seeking the assistance of AI it is time consuming as it writes each line of code one by one.
So I asked my friendly Claude-Bonnet to suggest a cleaner file structure: integrating JS so I don’t have to repeat the header, footer and drop-down menu each time, based on main.css in Manuela’s Projectmanagement page
This matches exactly what's in the original main.css
file from the Project Management page.
The key is to keep it simple and match the original styling exactly, without any extra properties or modifications.
I'll help you create a cleaner structure using JavaScript components for the header and footer. Here's a proposed directory structure for version2:
version2/
├── index.html
├── assets/
│ ├── css/
│ │ ├── style.css
│ │ ├── header.css
│ │ └── footer.css
│ ├── js/
│ │ ├── components/
│ │ │ ├── header.js
│ │ │ └── footer.js
│ │ └── main.js
│ └── images/
│ ├── logo.svg
│ ├── linkedin.svg
│ └── gitlab.svg
├── pages/
│ ├── bio.html
│ ├── projects.html
│ └── assignments/
│ ├── index.html
│ ├── project-management.html
│ └── computer-aided-design.html
└──
README.md
The main benefits of this approach are:
DRY (Don't Repeat Yourself) - header and footer code is written once
Easier maintenance - changes to header/footer only need to be made in one place
Better organization - separate concerns into different files
Modern approach - using Web Components for true encapsulation
I'll help with the CSS files and suggest a way to save our conversation. First, let's create the CSS files:
/* Main styles */
body {
font-family: 'DM Sans', sans-serif;
margin: 0;
padding: 0;
line-height: 1.6;
}
.container {
width: 90%;
max-width: 1170px;
margin: 0 auto;
padding: 0 20px;
display: flex;
justify-content: space-between;
align-items: center;
}
.hero {
margin-top: 1px;
background-image: url('../images/taiwanjungleroad.jpg');
background-size: cover;
background-position: top;
height: 111vh;
display: flex;
align-items: center;
justify-content: center;
text-align: center;
color: white;
}
.hero h1 {
font-size: 2.5rem;
margin-bottom: 20px;
text-shadow: 2px 2px 4px rgba(0,0,0,0.5);
}
.header-default {
padding: 20px 0;
background-color: #ffffff;
border-bottom: 1px solid #eee;
}
.logo-title {
display: flex;
align-items: center;
gap: 20px;
}
.logo {
height: 60px;
}
.name {
font-size: 24px;
text-decoration: none;
color: #333;
}
.navigation {
display: flex;
gap: 60px;
align-items: center;
}
.navigation a {
text-decoration: none;
color: #333;
font-size: 16px;
text-transform: uppercase;
letter-spacing: 1px;
}
.dropdown {
position: relative;
}
.sub-nav {
display: none;
position: absolute;
top: 100%;
left: 0;
background: white;
min-width: 300px;
box-shadow: 0 2px 5px rgba(0,0,0,0.1);
padding: 10px 0;
z-index: 1000;
}
.dropdown:hover .sub-nav {
display: block;
}
.sub-nav a {
display: block;
padding: 8px 20px;
white-space: nowrap;
text-transform: none;
}
.footer {
background: #ffffff;
padding: 20px 0;
margin-top: 1px;
border-top: 1px solid #eee;
}
.footer-content {
width: 90%;
max-width: 1170px;
margin: 0 auto;
display: flex;
justify-content: flex-start;
align-items: center;
gap: 30px;
}
.copyright, .footer-links, .social-links {
display: flex;
align-items: center;
}
.footer-links a {
color: #666;
text-decoration: none;
}
.social-links {
margin-left: auto;
display: flex;
gap: 15px;
}
.social-links img {
height: 24px;
vertical-align: middle;
transition: opacity 0.8s ease;
}
Once I had a good understanding of the code it is quicker and more efficient to modify the code directly rather than asking the AI tool to modify the code directly.
The current version is easy to read, key features:
- a nice header: the fablab barcelona logo and my name are both svg files linking back to index home page on every page.
- Bio, Project and Assignment page links on the header.
- Assignment drop-down menu on all pages, and gird format for easy navigation through weekly assignment and project pages.
- Student agreement, contact details and copyright on the footer.
Choosing a final project
I decided to jot down my interests to see where they cross over:
Figure 5 : Mindmaps
I feel that optimising food production to consummation and moving back towards a zero waste model is essential for a healthy society. I therefore want to explore designing a desirable and safe means of koji fermentation.
The principle resource is the following book that I bought last year :
Koji Alchemy: Rediscovering the Magic of Mold-Based Fermentation (Soy Sauce, Miso, Sake, Mirin, Amazake, Charcuterie)
I chose to play around with AI imagery to add a more appealing feel to the website. I asked chatgpt the following prompts:
I'd like you to create an image of koji mould under the microscope, so that I might use it as a thumnail on my project website : size 370 x 370 px
Is this actually factual representation of koji mould ? if not please change it so it is.If you could also propose an illustration, as if it was illustrated by the animator of the anime film perfect blue" (1995) please.
The images were tinified on tinypng.com before being added to the images file directory for the webpage. The complexity of the image meant that they could not be saved as an svg. You can find more information about the project idea on the following here