← Home
2317

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.

as far as he gets

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:58:04 · 42.2 KM · DELHI one tap, and the page exists

03 — What you do

Three things, in the order they happen

  1. 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.

  2. 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.

  3. 03

    Share exactly one link

    One address, and it is yours. Send it, put it in a bio, print it on something.

grid ledger statistics /runner/you?view=

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.

pb at every distance every result is a link

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.

training plan pace predictor splits
Astro · Workers Supabase · RLS R2 photos Tailwind v4

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 →
A real profile, no account: /runner/sankettambare All four calculators, no sign-up: /tools

Built by Sanket Tambare — sankettambare.in · LinkedIn · GitHub
Mascot: Blip by Trevin Chow.