01 — RunFolio
Every finish, framed.
A race portfolio, not a training tracker. One page that proves what you have run — and one link that carries it.
- Races logged
- 23
- Distance
- 537 km
- Marathon PB
- 5:05:53
Those figures are read from one real runner’s races when the site builds. Nothing on this page is a placeholder.
02 — The problem
The finish line is where the record falls apart
You cross the line and the race scatters. An activity buried in a feed. A timing certificate in your downloads folder. Two hundred photographs in the camera roll. Maybe a spreadsheet.
Every running app tracks what you are going to run. Almost nothing holds what you actually did — and the races you finished are the part worth keeping.
RunFolio is a race portfolio. Not a training tracker, not another dashboard.
03 — What you do
Three things, in the order they happen
-
01
Log a race in under a minute
Event, date, distance, finish time. Preset chips for the distances you actually run, so a marathon is one tap. Bib number and a certificate link if you want the receipt, and a free-text box if the race deserves a story.
-
02
Put the photographs first
Every race is a photograph with the numbers laid over it, not a row in a table. Drop in whatever your phone took — portrait, landscape, any mix — and it is compressed in your browser on the way up, so a gallery still opens on a bad connection.
-
03
Share exactly one link
One address, and it is yours. Send it, put it in a bio, print it on something.
04 — Your page
One page, three ways to read it
The same races seen as a grid for the photographs, a ledger for the record, or statistics for the numbers.
-
The view is part of the address
What you are looking at is what you send. And every view renders on the server, so all three work with JavaScript switched off.
-
Share cards are drawn when you save
Not when someone clicks. A pasted link carries a card with your name and your numbers already on it.
-
No sign-up wall for visitors
Whoever opens your link gets a page that reads like a magazine spread and ships almost no JavaScript — two component scripts on a profile, three if a race has a gallery.
05 — Beyond the log
Numbers you never had to keep
-
Statistics, computed not entered
Personal best at every distance, total distance, races per year, cities run in, average pace. Derived from your races, so they cannot go stale.
-
Import from Strava
Connect once, see your run activities, tick the ones that were races. Importing the same activity twice does not create a second race.
-
Four free tools, no account
A training plan generator, a pace calculator, a race time predictor and a split planner. Each is a pure function of the query string, so every result is a link you can send to whoever coaches you.
06 — Under the hood
Built to be checked, not just claimed
Astro on Cloudflare Workers. Supabase for authentication and Postgres, with row-level security on every table. Cloudflare R2 for photographs. Tailwind v4.
251 tests passing, type-checking clean across 162 files, and an accessibility pass where contrast was measured rather than eyeballed.
Next: custom email delivery, Strava connect verified end to end, and a seeded demo profile with real photography.
runfolio.sankettambare.in →/runner/sankettambare
All four calculators, no sign-up:
/tools
Built by Sanket Tambare —
sankettambare.in ·
LinkedIn ·
GitHub
Mascot: Blip by Trevin Chow.