Skip to main content

Sendit

Track your sends. Share your progress.

React NativeExpoAWSCoreMLTypeScript
current — working toward release

SENDIT

Track your sends, share your progress, and watch your climbing evolve with AI-powered analysis

React NativeExpoCoreML
Sendit main screen

A mobile-first bouldering tracker built for climbers who want more than a spreadsheet

Overview

about

Learn More

Most climbers track progress the hard way — mental notes, photo albums, or scattered spreadsheets. Sendit centralises everything: record a climb right from the wall, tag it with grade and style, and watch your improvement unfold in charts and stats.

The app is designed around the bouldering session. Climbs are grouped by date, filterable by grade, style, gym, and outcome.

Sendit calendar screenSendit calendar list screen
01

Mobile First

Built entirely in React Native with Expo, targeting iOS and Android from a single codebase. File-based routing via Expo Router keeps navigation clean.

02

Cloud Backend

AWS powers the backend — Cognito for auth, RDS for the database, and S3 for video storage. IAM policies enforce access at the infra layer.

03

Offline Ready

A persistent offline queue lets climbers log sessions without connection. Climbs sync automatically when the device reconnects.

Features

// Features

Under the hood

REC

Video Recording & Upload

Record climbs in-app or pick from camera roll. Videos are compressed using adaptive quality tiers, keeping storage low without sacrificing clarity.

expo-cameraexpo-image-pickerAWS S3
AIKey

AI Hold Detection

On-device CoreML model runs body-pose estimation and oriented bounding-box hold detection on iOS. No server round-trip needed.

CoreMLSwiftExpo Native Module
STAT

Stats & Progress

Session grouping, grade distribution charts, send-rate tracking, and animated stat counters. Filter by grade, style, gym, and outcome.

React ContextreanimatedAWS RDS
FEED

Social Feed

Public climbs surface in a community feed. Follow users, like climbs, leave comments — all backed by AWS with IAM privacy controls.

AWS IAMPostgreSQLOAuth
SYNC

Offline Queue & Sync

Climbs logged without connection are held in a persistent queue and auto-synced when back online. Two-tier network cache reduces redundant fetches.

AsyncStorageNetwork CacheExpo NetInfo
AUTH

Authentication

Full auth via AWS Cognito with PKCE flow. Google and Apple sign-in supported. Sessions persist and refresh automatically across restarts.

CognitoPKCEGoogle OAuthApple Sign In

Demo

// Screens

Screen by screen

Sendit record screenSendit log screen
01

Record & Log

Full-screen camera interface with one-tap recording. Grade, style, and gym are tagged before saving. Home tab groups climbs by session date with animated stat counters.

Sendit community feed
02

Community Feed

Public climbs from followed users and nearby gyms appear in the feed. Video plays inline; likes and comments work in a tap.

Sendit gym screen
03

Gym Finder

Browse gyms and discover climbs at your local wall. Filter by grade, style, and rating. CoreML auto-detects hold colors on iOS.

Sendit profile screen
04

Profile & Stats

Activity list/calendar, follow graph, and settings. Progression charts and a heatmap calendar visualise long-term trends.

Conclusion

// Stack

Everything that makes it run

Framework
React Native 0.81Expo ~54Expo Router
Backend
AWS AmplifyPostgreSQLAWS S3
Auth
AWS Cognito (PKCE)Google OAuthApple Sign In
Native / iOS
CoreMLExpo Native ModuleSwift
Media
expo-cameraexpo-videoexpo-image-picker
Animations
react-native-reanimated
Local Storage
AsyncStorageexpo-file-system
Testing
Vitest

Built to solve
a real problem.

Sendit started as a personal itch — there was no great way to keep a video log of bouldering progress that didn't live in camera roll chaos. Building it from scratch forced decisions across the full stack: database schema, OAuth wiring, a native Expo module in Swift, offline queue, and video compression for a 500 MB storage budget.

The result handles the edge cases climbers actually hit — bad gym WiFi, recording 30-second dyno attempts, and wanting to see exactly when they cracked V7.

Sendit — a bouldering tracker by Zelong