selfie video surveys

This document is a live and radically open specification of our primary product in development:

Watch us making it at Surfey Development on YouTube!

Thumbnail: Surfey Logo


Surfey is an app that enables video as a survey medium: both as the content to review and method of the respondent.

Here's how it works:

Yes, it really is that simple -- and it's fast too!

Simple, Private, Fast

Coming soon: privacy mask (blur / replace face), fancy transcript, analysis at scale.

Table of Contents


The list below is sorted alphabetically for simplicity rather than by the size or importance of the feature.

Access Control List (Public / Unpublish)

Set the acl property on a video to one of: private, public, or a list of specific users (by email). This determines who is able to see the response "at" page.

Android App

Currently targeting Android 14 (SDK Level 34) due to Flutter dependencies. See

Apple Sign-In

Case Insensitive

Critical IDs and properties are case insensitive so accidentally entering them with caps will not cause confusion.

Combined Playback / DuoPlay

The video can be played side-by-side (or picture-in-picture) with a video response.

Codec / Container / Format Support

Multiple formats supported by utilizing FFMPEG and the Google Transcoder API. All common ones listed here:

Google Sign-In

Hide Email

iOS / iPhone / iPad App

Platform Support: Portable but Contemporary

This product is designed to work on all common modern devices and web browsers. We strive for compatibility moving forward rather than backwards.

Privacy First

User privacy is a primary feature of Surfey as anthetical as that sounds to video being the medium. The vision is to reduce fear and friction for feedback to the point where people are happy to give it.

See the Privacy Policy for gritty details.

QR Code


Obvious endpoints which leaves the app design in the UI but does the heavy-lifting in the API.

Short Links /at/

The URL for responding to a survey is a short link using the 10-character ID. You can get to any survey (assuming you have access) by going to

Unlimited Videos

There is no [current] cap on the number or length of videos that you can upload for either the video survey or response.

Watch & Respond Simultaneously

The video survey is played while the user's webcam is activated to record their response at the same time with the goal being to synchronize the two.

Web App

Modern HTML application for desktop users.

Future Features

These are being tested internally.

AI Transcription

The video is transcribed using multi-modal AI analysis.

Email Interface

Create and transcribe videos via email: send any file to and receive a transcription in the response.

Face Blur

Automatically blur faces in saved response videos for privacy.

Linux Native Application

See note on MacOS Native Application.

MacOS Native Application

We can build this but there doesn't seem to be a point to it given the state of web browsers so for desktop we'll focus on the web app.

Reports, Charts, Graphs

All video responses are analyzed along with the survey and automatic reports, charts, and graphs are built out and displayed.

Spanish Localization


These features have not yet been implemented but are on the drawing board.

Amazon Turk Integration

Use Turk HITs to find respondents.

Clickworker Integration

Use the existing Gig workforce to find respondents.

Open-Ended Responses

Allow respondent to continue providing feedback until they click a "FINISHED" button.

Privacy Mask

Enable a cartoon avatar and/or voice obscuring. Initially this would be handled on the backend using Python and OpenCV but later implement a real-time option similar to Zoom avatars.

Paid Accounts

Everything is currently free and unencumbered by advertising. Revenue is required to keep this going!

Rewards (for Responses)

Surveyors must be able to reward respondents for their feedback to incentivize it.

Internal Features

These are good for our team's morale.

Bash Jobs

Ability to run bash scripts for bigger jobs which significantly reduces the code base.

Developers: add surfey/bin to $PATH to use all of the bash scripts more easily.

Cloudflare Workers

Lightweight edge-based server-side routing for the website and web app.

CORS Support

The API uses all the correct methods and headers to allow for cross-origin requests from to (or wherever the API is running).

Developer Simplicity

Add to Shell Profile for bash job testing:


Flutter UI

Easier multi-platform application support with initial offerings of a web app and native apps for iOS and Android.

Go / Golang API Server

Fast startup and flexibility for cloud platforms.

Google Cloud Platform (GCP)

Google Cloud Shell

Build, deploy, and test the API on any machine (even iPad!) using Google Cloud Shell.

Add to $HOME/.customize_environment for bash job testing:

JSON First

The backend API and storage system deal exclusively in JSON as the data format.

MVP JavaScript Library

Minimalist approach to adhoc MVP UI/app development: code an entire app in a single HTML file with mostly-semantic tags.

Biased towards Pico CSS.

Rive Animations

Blems FTW!


Potentially replace Google's managed API with an FFMPEG + Compute approach:


Used to test bash scripts with videos from other websites such as YouTube. Typically our jobs will support passing in an ID or a URL and the latter gets passed to this to resolve.