Portfolio

Selected web apps that SkyPilot designed and built.

Project 1 of 5

Profile Pal

A SkyPilot product2025–present

An AI tool that turns a short typed, spoken, or uploaded description of a rescue animal, plus an optional photo, into a ready-to-post adoption bio in the language of the rescue's choice.

Open Profile Pal profilepal.skypilot.dev
Profile Pal on a desktopOpen live app
Profile Pal on a desktop browser

Roles

  • Camilla Thorsen

    Owns the product end to end. It began as her Computer Science capstone project, in response to needs that she identified while building Life4Cats Rescue. She has since revised the AI pipeline and added authentication, rate limiting, bot and spam protection, and the Supabase and Sanity integrations.

Highlights

  • Cost-aware AI pipeline

    A two-stage pipeline on OpenAI's Responses API: GPT-5 nano extracts the animal's facts and tags the photo, then GPT-5 mini writes the bio. Keeping extraction and tagging on the smaller model and generation on the larger one cuts the cost of every bio.

  • Voice or text

    A rescue records a description or types one, and OpenAI's Whisper model transcribes the recording.

  • Any language in, any language out

    The description can be in any language, and the bio is written in the language that the rescue chooses, or in the description's own.

  • Publishes to Sanity

    A rescue connects its Sanity CMS, and the app writes the bio and photo straight into the rescue's animal records through Sanity's API, in one transaction. The rescue's Sanity token is stored encrypted.

  • Abuse protection

    Upstash Redis rate-limits requests, and Cloudflare Turnstile blocks bots and spam.

Tech stack

Frameworks
  • Next.js
  • React
  • Tailwind CSS
  • Headless UI
Integrations
  • OpenAI
  • Supabase
  • Sanity
  • Cloudinary
  • Upstash Redis
  • Cloudflare Turnstile

OpenAI: GPT-5 mini and GPT-5 nano for text and photo tagging, Whisper for speech-to-text

Languages
  • TypeScript
Project 2 of 5

Life4Cats Rescue

Client: Life4Cats Rescue2024–present

The website of a cat rescue near Târgu Mureș, Romania, where visitors meet the cats up for adoption, donate, and get in touch, in English, German, and Romanian.

Life4Cats Rescue on a desktopOpen live app
Life4Cats Rescue on a desktop browser

Roles

  • Camilla Thorsen

    Owned, designed, and coded the site end to end, through the whole development cycle, working directly with the rescue.

Highlights

  • Multilingual

    The whole site, every animal's profile included, renders in English, German, and Romanian. i18next serves the interface text from one catalogue per language, each animal's profile has a field per language in Sanity, and every language has its own prerendered URLs.

  • Sanity CMS

    The rescue manages its animals and its pages in Sanity Studio, and Cloudinary serves the images.

  • Filterable adoption list

    Visitors narrow the animals by type, sex, age, breed, and special needs, and by whether an animal gets on with cats, dogs, or children. The build pulls the published animals from Sanity, and the filters run instantly in the browser.

  • Connected to Profile Pal

    Profile Pal writes a new animal's bio and photo straight into the rescue's Sanity dataset as a draft, so a listing goes from description to published without retyping.

Tech stack

Frameworks
  • React
  • Vite
  • React Router
  • Tailwind CSS
  • Headless UI
Integrations
  • Sanity
  • Cloudinary
  • PayPal
Languages
  • TypeScript
Project 3 of 5

Wash'Em

Client: Centre for Affordable Water and Sanitation Technology (CAWST)2022–2023

A tool that guides humanitarian teams through assessing a crisis setting and generates tailored recommendations for a handwashing behaviour-change program.

Open Wash'Em washem.info/en
Wash'Em on a desktopOpen live app
Wash'Em on a desktop browser

Roles

  • Camilla Thorsen

    Led the frontend. Redesigned and prototyped the interface, including the eight-stage Program Designer, a dynamic form. Coded the component library and set up the translations.

  • William Thorsen

    Built the Program Designer engine, the logic that determines the recommendations, and integrated Auth0.

Highlights

  • Guided assessment

    Branching form logic takes a team through the assessment and generates interventions specific to its setting. Used by 94+ organizations, including UNICEF, World Vision, and Oxfam.

  • Program Designer engine

    The Program Designer engine is a separate package that turns the questionnaire's answers into recommendations.

  • Multilingual

    Vue I18n serves the app and its questionnaire in English, French, and Spanish.

  • Partners

    A collaboration of CAWST with USAID, Action contre la Faim, and the London School of Hygiene & Tropical Medicine (LSHTM).

Tech stack

Frameworks
  • Vue 3
  • Vite
  • Pinia
  • Vue Router
  • Vue I18n
  • Tailwind CSS
  • Headless UI
Integrations
  • Auth0
  • Sentry
  • Google Analytics
Languages
  • TypeScript
Project 4 of 5

WASH Resources

Client: Centre for Affordable Water and Sanitation Technology (CAWST)2021

A library of CAWST's water, sanitation, and hygiene (WASH) training resources, where practitioners find materials to learn from and to teach others.

Open WASH Resources washresources.cawst.org/en
WASH Resources on a desktopOpen live app
WASH Resources on a desktop browser

Roles

  • Camilla Thorsen

    Designed and prototyped the interface, built the component library, and worked with stakeholders to build the interactive infographics from scratch.

Highlights

  • Component library

    SkyPilot designed the interface and built a component library for dynamic content uploaded by organizations in the WASH sector. The content is documents, videos, and collections, often multilingual, that anyone can download.

  • Multilingual, right to left

    English, French, and Spanish, plus Arabic in a right-to-left layout.

  • Searchable library

    Algolia searches the whole collection, and visitors filter the results.

  • Interactive infographics

    Hand-built in HTML, CSS, and TypeScript, without a charting library.

Tech stack

Frameworks
  • Vue 3
  • Vue I18n
  • Tailwind CSS
Integrations
  • Sanity
  • Algolia
  • Intercom
  • Auth0
Languages
  • TypeScript
Project 5 of 5

COVID-19 Hygiene Hub

Client: Centre for Affordable Water and Sanitation Technology (CAWST)2020–2023

A multilingual resource hub that gives COVID-19 response teams in low- and middle-income countries evidence-based guidance on hygiene and outbreak programming.

Open COVID-19 Hygiene Hub www.hygienehub.info/en/covid-19
COVID-19 Hygiene Hub on a desktopOpen live app
COVID-19 Hygiene Hub on a desktop browser

Roles

  • Camilla Thorsen

    Designed and prototyped the interface, and built the static component library and the interactive infographic.

  • William Thorsen

    Built the rest of the application, including the Storyblok and Intercom integrations and the backend integrations.

Highlights

  • Used in 63 countries

    A public health platform that connected governments and NGOs with hygiene advisors. 313 organizations in 63 countries used it.

  • Multilingual, right to left

    English, French, and Spanish, plus Arabic in a right-to-left layout.

  • Managed content

    The guidance is managed in Storyblok, and Cloudinary serves the images.

  • Partners

    A collaboration of CAWST with the London School of Hygiene & Tropical Medicine (LSHTM) and Action contre la Faim, funded by USAID.

Tech stack

Frameworks
  • Vue 2
  • Vue Router
  • Vue I18n
Integrations
  • Storyblok
  • Cloudinary
  • Intercom
  • Sentry
  • Google Analytics
Languages
  • TypeScript
Contact

Your web development project starts here.

Get in touch with our team to learn how we can help bring your project ideas to life.