Now playing: Loading...
Last watched: Being John Malkovich (1999)
Currently reading: The Anxious Generation - Jonathan Haidt
Back
Created

FastAPI Cloud

The platform for deploying FastAPI apps. A summary of what I've shipped since day one.

I’ve been at FastAPI Cloud since the very beginning, and have worked on a bit of everything: the dashboard frontend, backend, CLI, E2E testing with Playwright, CI/CD, docs, UX research, and maintaining the landing page (including migrating it from Framer to Astro).

Dashboard

The FastAPI Cloud dashboard, showing a team's apps with their deployment status, URL and region

Auth and account lifecycle

Sign-up through deletion, including the parts that decide who gets in at all: sign-up and login, email verification, password reset and change notifications.

Teams, roles and permissions

I built the teams product end to end, starting from creating your first one. Everything around it came after: team settings, a switcher to move between them, avatars, transferring a team to someone else, leaving one. The new-team flow and the settings screens were both revamped more than once as the product grew.

Underneath, the ownership model was remodelled a few times, each time without breaking existing teams. Admin-only restrictions came first, then an owner role introduced with backwards compatibility, and single ownership eventually retired entirely, which opened the door to multi-owner support. On top of that I built a full RBAC system, with a permissions matrix, a role editor, and the ability to assign roles to people.

Invitations

Getting a second person into a team. Send, view, cancel and accept invitations, with expiry handling and expiration notices.

Billing and subscriptions

Payments end to end, from the first line of the provider integration to the checkout screen users actually see: seat-based pricing, entitlements deciding what each plan can do, the checkout flow, the customer portal, billing permissions, and the billing page itself. Paywalls across the app, from plan selection when a team is created to upgrade prompts for teams on the free one. And the whole subscription lifecycle (downgrades, resumes, revocations) plus team usage and resource tracking.

Apps and deployments

This is the product surface, and some of it went through my hands at some point: the data models behind apps and deployments, the API underneath them, and every screen on top.

I built app transfer between teams from scratch. I refactored environment variables and secrets management, and added additional features such as bulk paste, import ability, and redeploy on change. I also worked on custom domains, where the work was mostly about improving the overall experience; and scaling, where I reworked the interface.

Logs and metrics

The observability screens, starting with the first log viewer and refactored several times since: a restructured view, a replica filter, log level surfacing, and a panel theme aligned with the rest of the dashboard. On the metrics side, a rework of the charts and the route behind them, and a few other improvements.

Email and notifications

Pretty much every message the platform sends, and the machinery that decides when to send it. The templates were refactored for readability and restyled several times. Notifications were centralized into a single system.

UX

I’ve done a lot of UX work, beginning with research and continuing through design, implementation, and iteration. I watch people use the product, I read reports and look for patterns and I try to understand what the user is trying to do, and how the product is getting in their way. Then comes the fixes.

The rest is smaller and constant, the little details that make the product feel better and a long tail of bug fixes and tweaks.

Design system and interface

Two full component library migrations. Around those, the steady maintenance centralizing UI components. Theming, typography, dark mode, and a color palette.

Accessibility work, responsiveness across the dashboard, performance improvements, and trying to keep the codebase clean as it grew.

End-to-end testing

The Playwright initial setup, authenticated fixtures, CI wiring and sharded execution, then suites for every major feature. Smoke tests that run against live clusters on a schedule and alert the team when something breaks, so we hear about a broken path before a user does.

Tooling, build and CI

The everyday things. I set up the lint and format toolchain and have kept it running, moved the project to a new package manager, and look after the workflows around it. I also set up some of the CI/CD pipelines.

Landing page and documentation

I moved the landing page from Framer to Astro: I set up the project, the docs, the fonts and the base styling, refactored the UI, and added the sections. I’ve been its main maintainer since.

The FastAPI Cloud landing page: "You code. We cloud."

Documentation

I wrote most of the pages on the site and continue to actively maintain them: the getting started guide and bringing an existing project over, how deployments work, the CLI reference, advanced features like autoscaling, custom domains, deploy tokens and app transfer, integrations with Neon, Supabase, Redis and third-party services, monitoring, team and account management, billing, troubleshooting and FAQs, and reference pages like how app URLs are generated.

Then the ongoing maintenance: tweaks, typo and consistency passes, and rewordings as the product changes.

Newsletter and forms

Initial newsletter setup and forms handling, including the newsletter signup form, and the early waitlist form.

Tooling

A package manager migration, dependency updates, and Playwright tests that check the docs stay consistent and the pages stay accessible.