| FullStackWithLawrence/aws-openai |
A React + AWS Serverless full stack implementation of the example applications found in the official OpenAI API documentation. See this system architectural diagram for details. This is an instructional tool for the YouTube channel "Full Stack With Lawrence" and for University of British Columbia course, "Artificial Intelligence Cloud Technology Implementation". |
BUILT WITH REACTJS
This site has a React front end and a backend powered by a Wordpress REST api. I originally built this site in 2016 with Wordpress when I was first getting started with web development. In mid-2020, immediately after taking an online ReactJS course on Coursera.com, I rebuilt it as a ReactJS/Redux app that looked nearly identical to the Wordpress original. It was my first foray into creating a fully-blown ReactJS/Redux web application. In 2026 I modernized it, moving it to TypeScript, Vite and Redux Toolkit, adding a test suite and prerendered pages, and giving it a look of its own.
I like ReactJS. I've been working with Angular since 2018 and by comparison I find React more intuitive and more performant. Additionally, the ReactJS community is large and growing, which results in more searchable online help content and more and better tooling.
Front End: React 19, written in strict TypeScript and built with Vite, with Redux Toolkit for state and data, Bootstrap, and icons from the free version of Font Awesome. The original Wordpress version used a professionally-designed third-party theme, and the first React version duplicated it using open source tools. Today the site has its own design, taken from the home page: black, Courier type and a single amber accent. I encountered a variety of design and technical challenges with the home page, which you can read more about in this blog post, Animations in ReactJS.
Every page is prerendered to html with its data when the site is built, so search engines and link previews see each page's content without running any JavaScript, and the browser takes over from there. The data from Wordpress, GitHub and YouTube is validated against zod schemas, a Vitest suite covers more than 95% of the code, and GitHub Actions tests, releases and deploys every change.
Source code: https://github.com/lpm0073/lawrencemcdaniel.com
I designed and coded the logo cube animation on the home page and then later wrote this blog article that discusses my design considerations and some of the unique challenges I encountered along the way, and their solutions.
Back End: The back end is a Wordpress REST api and the AWS Cloudfront content delivery network. Wordpress is a great back end solution, though oddly, I never read nor hear much about this. I manage a medium-sized Wordpress hosting platform for my clients so this obviously impacts my decision. This site mostly needs back-end support to provide image assets. Currently, there are around 500 images on this site which are all ultimately served by AWS Cloudfront CDN. I like Wordpress because there's a lot of important minutia like backups, security, permissions, data backups etcetera that Wordpress takes care of out of the box. I use some premium Wordpress plugins to help with image optimization and CDN synchronization which make adding new images pretty painless. The Wordpress REST api can take several seconds to respond, so the site never waits on it: each page arrives with its data already in the html, and the browser keeps a copy of every api response and refreshes it in the background. Lastly, the Wordpress REST api is robust (and free).
Backend API URL: https://api.lawrencemcdaniel.com/
Progressive Web App (PWA): This site is fully-functional and performant regardless of Internet quality, even if there's no Internet service at all. It's observably performant because all of the site assets are precached and served locally. It's more resilient because it works fine even with sparse or non-existent Internet service.
Part of this is made possible simply because the World Wide Web Consortium implemented a set of standards for implementing a local browser javascript-based service worker. A service worker is a script that your browser runs in the background, separate from a web page, opening the door to features that don't need a web page or user interaction. They manage the client side of synchronizing web apps; topics like precaching, runtime caching, request routing, and background code and static asset synronization. I'm using Google Workbox, a library that bakes in a set of best practices and removes all of the heavy lifting involved in working with service workers.
In my case converting my standard React app into a PWA involved modifying/creating the following:
- vite.config.ts - vite-plugin-pwa builds the service worker and injects its precache list
- service-worker.ts - Google Workbox precaching and runtime caching
- serviceWorkerRegistration.ts - registers the service worker with workbox-window and reports new releases
- main.tsx - online/offline wrapper
- App.tsx - service worker update alerts
- custom appUpdate component: for automatic update alerts.
Infrastructure: This site runs on AWS primarily because I had existing multi-tenant infrastructure there that I could leverage for this site (see diagram below). But that aside, there are a couple of things about AWS that are hard to beat for small projects. First, S3/Cloudfront are effectively zero cost, and they are super resilient and performant. And second, the site is just files in S3, so there is no web server to manage at all. GitHub Actions builds the site, tests it and uploads it to S3 on every release.
Code Samples & Publications
Also checkout out my side project, "Matrix Digital Rain for React", here
These are a combination of managed GitHub repositories that I use for instructional purposes, combined with repositories belonging to open source organizations to which I am the maintainer. Most of these also demonstrate best practices for software management including pre-commit, linting techniques, and devops methods for automating unit testing, documentation and CI-CD operations for build, deploy and code dependency package updates.
| Repository | ||
|---|---|---|
| ||
| ||
| ||
| ||
| ||
|
These are articles that I've published. Usually from my personal blog, but every now and then from other sources.
| Article | ||
|---|---|---|
| ||
| ||
| ||
|
Videos from my YouTube Channel, Full Stack With Lawrence
| Video | ||
|---|---|---|
|





