# OpenWorkspace Case Study — Carter Steinhoff

> OpenWorkspace case study: a Next.js frontend, Fastify API, AWS EC2 and RDS backend, and Windows and macOS desktop clients.

- Carter's role: Product design & full-stack development

- System: Next.js/Vercel · Fastify · AWS

- Status: Live and in production

- [Live site](https://openworkspace.com/)

## Overview

A product that spans the web, cloud, and installed desktop clients.

I designed the Next.js product and account experience and built the Fastify service running on AWS. Together they support licensing, checkout, accounts, workspace data, and requests from the Windows and macOS clients.

The defining constraint is release timing: installed clients do not all update at once, so the API must evolve without silently breaking software already in use.

## Project story

### Product scope: One promise crosses four independently deployed layers.

The website explains the product and handles account flows. Fastify owns service APIs, PostgreSQL stores product state, and native clients perform desktop automation. Users experience those separately shipped layers as one product.

### Compatibility: The installed client is part of every backend decision.

Before an API field changes, its Windows and macOS callers have to be traced. Server updates preserve the contracts existing clients expect while authentication, licensing, and workspace behavior evolve.

### Response: Simplify the service without guessing what clients need.

I traced native callers before changing responses, consolidated license creation paths that had drifted, and tightened authentication control flow. Backend changes are grounded in the behavior of the installed software they serve.

## Decisions

### A shipped desktop app is a fixed constraint

Installed clients cannot change until a new release ships. Server updates therefore preserve their existing contracts, and client source is checked before any response field is removed.

### AWS keys were being handed to every client

License validation returned raw IAM credentials that the desktop client did not use. After confirming that in the client source, I removed the field without changing client behavior.

### A missing return left admin routes open

The authentication decorators returned a 401 but did not stop execution, allowing protected handlers to continue. Adding the missing return fixed the control-flow error.

### Three ways to create a license became one

Checkout, the external API, and the admin UI created licenses through separate paths with different fields and responses. They now call one shared function instead.

## Architecture

A web-to-desktop product architecture.

The public frontend, cloud service, database, and desktop clients work as one system designed and developed end to end.

- **Frontend:** Next.js product experience deployed on Vercel
- **Backend:** Fastify web server running on AWS EC2
- **Database:** AWS RDS
- **Clients:** Windows and macOS desktop applications sending requests to the backend

## Technology and delivery

One stack from product story to native client.

The web experience, TypeScript service, PostgreSQL data layer, AWS infrastructure, and native desktop code are designed as one connected product rather than separate deliveries.

### Web experience

- **nextjs:** Product, account, research, and trial experience
- **react:** Component model across the public web application
- **typescript:** Shared type safety throughout the web and API layers
- **vercel:** Frontend build and deployment

### Cloud service

- **nodejs:** Runtime for the application service
- **fastify:** Licensing, account, checkout, and client APIs
- **drizzle:** Typed queries and database migrations
- **postgresql:** Product data hosted through AWS RDS

### Desktop clients

- **cpp:** Core Windows desktop automation client
- **dotnet:** Windows application and system integrations
- **swift:** macOS client built with SwiftUI and AppKit

## What Carter owned

- Product positioning and responsive Next.js/Vercel frontend
- Complete Fastify backend and web-server development
- AWS EC2 application hosting and AWS RDS integration
- Request handling for Windows and macOS desktop clients

## Selected screens

- **Product promise:** The opening screen explains the product in one sentence and gives the trial one clear action. [Image](https://cartersteinhoff.co/images/openworkspace-project.webp) — OpenWorkspace homepage with a desktop-automation headline and product preview
- **How it works:** A visual sequence turns a multi-step desktop workflow into an approachable product story. [Image](https://cartersteinhoff.co/images/openworkspace-how-it-works.webp) — OpenWorkspace how-it-works section explaining the workspace workflow
- **Capabilities:** A capability map separates what the product restores today from the wider desktop roadmap. [Image](https://cartersteinhoff.co/images/openworkspace-capabilities.webp) — OpenWorkspace capabilities page headed The road to a fully restorable desktop with workspace and browser restoration panels
- **Desktop framework:** The framework page explains Workspaces and FocalContextual as connected desktop concepts. [Image](https://cartersteinhoff.co/images/openworkspace-framework.webp) — OpenWorkspace framework page headed A modern framework for the desktop with Workspaces and FocalContextual sections
- **Research:** Research gives the product thesis a clear home beyond acquisition and account flows. [Image](https://cartersteinhoff.co/images/openworkspace-research.webp) — OpenWorkspace research page headed Advancing the desktop for the next era of work with two areas of inquiry
- **Whitepaper:** Long-form product thinking uses a quieter reading layout within the same visual system. [Image](https://cartersteinhoff.co/images/openworkspace-whitepaper-automating.webp) — OpenWorkspace whitepaper titled Automating the Desktop with an overview and article navigation

## Current status

Available in production today; the live experience reflects the system shown throughout this case study.

- [Back to all case studies](https://cartersteinhoff.co/portfolio/index.md)

- [Discuss a similar project](https://cartersteinhoff.co/contact/index.md)
