Surfey
selfie video surveys
This document is a live and radically open specification of our primary product in development: https://surfey.me
Watch us making it at Surfey Development on YouTube!
Synopsis
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:
RECORD: upload a video that presents an interest and requests feedback
SHARE: give the link via QR code or URL to your audience
RESPOND: collect respondent video selfies using their phones or webcams
Yes, it really is that simple -- and it's fast too!
Simple, Private, Fast
Works on all modern devices w/ selfie cameras
Login required to prevent anonymous trolls
Privacy first; respondent must opt-in to reveal email
No complicated setup, immediate results
Coming soon: privacy mask (blur / replace face), fancy transcript, analysis at scale.
Table of Contents
Features
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 https://en.wikipedia.org/wiki/Android_version_history
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
REST API
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 surfey.me/at/ID.
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 ai@surfey.me 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
Ideas
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 https://surfey.me to https://go.surfey.me (or wherever the API is running).
Developer Simplicity
git clone git@github.com:witw-llc/surfey.git
gcloud config set project surfey
Launch GO API from VS Code
Add to Shell Profile for bash job testing:
source $HOME/surfey/bin/bash_profile
FFMPEG
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 Logging (Logs Explorer)
Google Cloud Run & Jobs
Google Cloud Storage
Google Cloud Secrets Manager
Google Transcoder API
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:
/home/$USER/surfey/bin/customize_environment
JSON First
The backend API and storage system deal exclusively in JSON as the data format.
MVP JavaScript Library
Element Finding & Creation
Dialogs / Modals
Fetch w/ Progress
Form Handling
Identification
Script-based Components
Sleep
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!
Transcoding
Potentially replace Google's managed API with an FFMPEG + Compute approach: https://medium.com/google-cloud/event-driven-ffmpeg-transcoding-a-modern-solution-with-gcp-42995d5c3dbb
youtube-dl
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.