Overview
The best spots from a trip tend to end up as unlabeled photos in a camera roll. Graffiti turns them into places on a map, with as little manual entry as possible.
Travelers save Spots, each with photos, a description, an address, and hashtags, and group them into Walls: collections of places worth remembering or recommending. Around that sits a social layer of follows, likes, comments, and discovery of nearby and trending places.
Built between 2018 and 2020, it shipped on the App Store as Graffiti – Social Location, with a TypeScript Cloud Functions backend and a React web companion.
What it does
Spots and Walls
- Multi-photo Spots with descriptions, addresses, and hashtags
- Walls that group Spots and can be followed
- Private Spots you keep to yourself
Getting places in
- Photos placed on the map from their EXIF location
- Instagram posts imported as Spots
- A share extension for other iOS apps
Discovery
- Nearby and trending Spots
- Search by city and a cities-traveled view
Social
- Follow users, hashtags, and Walls
- Likes, comments, an activity feed, and push notifications
Tours
- Bookable tours with schedules and cancellation policies
- Payments through Stripe and Apple Pay
Details
- Night, retro, and silver map styles
- Traditional Chinese localization and an onboarding walkthrough
How it’s built
A map-first native client
The iOS app is Swift and UIKit with SnapKit layouts and RxSwift and RxDataSources for data flow, built on Dephyned’s SwiftyBootstrap library. RealmSwift caches data on the device, and the Google Maps SDK renders Spots on custom-styled maps.
Geo-queries for nearby places
Showing what’s nearby needs fast radius queries over user content, not a chronological feed. Spots are indexed with GeoFire, and MapKit and SwiftLocation handle device location.
A serverless backend
Firebase Cloud Functions in TypeScript handle geo-tagging, nearby queries, Instagram import, follow and activity fan-out, push notifications, and scheduled jobs. Data lives in Firestore, with images in Firebase Storage and AWS S3, and Spot photos are labeled automatically with Firebase ML Vision.
A web companion
A React and TypeScript site on Firebase Hosting serves public Spot pages, stories, and competition and affiliate pages, with components built in Storybook.