From code to a release
Changes are tracked in GitHub. Automated checks run on the code, and AWS Amplify builds and publishes the site from the repository. Build and deployment logs help me investigate failures.
About me
I’m 25, based in the UK, and I build websites, applications and software. You work directly with the person doing the work.
I work directly with HTML, CSS, JavaScript and PHP. My work includes interfaces, application logic, databases and the connections between systems.
This website uses Vite, JavaScript, HTML and CSS. Workshop1 is a Laravel application with member accounts, booking rules, subscription billing and a studio console. Those projects involve decisions about data, access and what happens when something fails.
I use AI to help explore ideas, research and write code. I also read, edit and debug the code myself. I need to understand how it works before I can maintain it or explain a decision to you.
That means looking beyond the first working screen: checking inputs, handling errors, reviewing dependencies and testing the journeys people will actually use.
See what I’ve builtA quick AI prototype can help you try an idea. Getting it ready for customers takes further work, whatever tools produced the first draft.
| A quick prototype can show | Production work needs to cover |
|---|---|
| A screen and a sample journey | Complete journeys, including loading, empty, success and error states. |
| Example data | Data structures, validation and rules for who can access each record. |
| A simulated integration | API connections, protected credentials, timeouts and failure handling. |
| An interaction that looks promising | Checks on small screens, with a keyboard and under slower loading conditions. |
| A version running locally | A repeatable build, a deployment process and a way to investigate problems. |
The checks depend on the project. A brochure site, an online shop and a membership platform have different responsibilities.
That little footer credit matters to me. So does the page above it: the way it reads, how it behaves on a phone and whether someone can finish what they came to do.
This site’s automated checks cover Chromium, Firefox and WebKit, different screen sizes, keyboard navigation and form success and failure states. I also review the layouts visually and measure loading performance.
Form-delivery tests here use simulated responses so they do not send enquiries. Payment checks verify the existing links and displayed prices without making a purchase. Testing should check the right thing without disturbing a customer.
The refinements are part of the job: change the spacing, simplify an interaction, fix the awkward edge case, then test again.
The hosting is part of how a website works. Here’s how I use AWS on Khadaffi.com.
Changes are tracked in GitHub. Automated checks run on the code, and AWS Amplify builds and publishes the site from the repository. Build and deployment logs help me investigate failures.
Amplify serves the site through Amazon CloudFront. Versioned assets can be cached for longer, while compressed images, self-hosted fonts and a small JavaScript bundle keep the pages light.
Amazon Route 53 handles the domain’s DNS. Amplify manages its HTTPS certificate, and the site sets browser security headers alongside its cache rules.
This portfolio is static. Applications need their own decisions about servers, data, permissions, backups, monitoring and cost. I work those out around what the product actually needs.
More on AWS Amplify Hosting, CloudFront caching and Route 53.
Tell me who it’s for, what it needs to do and what is difficult today. We can start there.
Tell me about your project