Fixit is a SaaS product that provides users with powerful tools for managing maintenance and repair workflows, including in-app payments powered by Stripe. This repo is home to the Fixit web app – a React SPA that provides core services and features to Fixit users.
Author: Trevor Anderson, Founder of Nerdware
The Fixit web app is a React SPA that provides core SaaS services and features to Fixit users, including in-app payments powered by Stripe.
Note
As with all Fixit cloud infrastructure, IaC files responsible for defining and implementing Fixit's cloud architecture/resources are split between two sibling repos:
- fixit-cloud-modules Terraform modules which define Fixit cloud resources.
- fixit-cloud-live Terragrunt configs which implement Fixit cloud resources.
Fixit Web is delivered to end users via the process outlined in the diagram below.
%%{ init: { "sequence": { "showSequenceNumbers": true, "wrap": true } } }%%
sequenceDiagram
actor User as End User
participant CF as CloudFront Cache
participant S3 as S3 Bucket Origin
User->>CF: GET gofixit.app
Note over User,CF: CloudFront Trigger:<br/>Viewer Request
alt if cache hit
rect rgba(0, 255, 0, 0.35)
CF-->>User: Return cached content
Note over CF,User: CloudFront Function sets<br/>CORS+Security headers<br/>on "Viewer Response"
end
else if no cache hit
CF->>S3: GET content from S3
Note over CF,S3: CloudFront Trigger:<br/>Origin Request
S3-->>CF: Return content
Note over S3,CF: CloudFront Trigger:<br/>Origin Response
rect rgba(0, 255, 0, 0.35)
CF-->>User: Return content
Note over CF,User: CloudFront Function sets<br/>CORS+Security headers<br/>on "Viewer Response"
end
end
This project's CI/CD pipeline uses GitHub Actions to test, release, and deploy code changes.
Test
- Runs test suites, adds test and coverage info to PRs, and updates CodeCov.Release
- Creates a new GitHub release using Semantic Release.Deploy
- Creates the relevant build, uploads it to an AWS S3 bucket, and invalidates the CloudFront cache.
This project uses uses GitHub Flow to deploy two live environments - staging and production - both of which are associated with a Git branch for releases:
Environment | Release Branch | Permits git push |
---|---|---|
staging | next | ✓ |
production | main | ❌ |
Project versioning and the CHANGELOG.md are managed automatically via GitHub Actions and Semantic Release.
For more information on how new code is integrated and deployed, check out the guide to CONTRIBUTING.
TypeScript types are generated using GraphQL Code Generator and the Fixit GraphQL schema. The same generated types are used throughout the entire Fixit stack.
When the Fixit GraphQL schema is updated during API development, changes are automatically pushed to Apollo Studio, thereby enabling every component of the stack to use the latest version of the schema (or any particular previous version, if necessary). The schema changes are pulled into other Fixit repos using Rover GitHub Actions, but can also be pulled imperatively using the Rover CLI.
All files, scripts, and source code contained herein are for proprietary use only by Nerdware, LLC.
See LICENSE for more information.