ben_sandi

Badges

100 Contributions1,000 Contributions10 Posts

Contributions

Posts

1 Day

62

7 Days

76

4 Weeks

113

All Time

6752

Current Streak

1

Longest Streak

13

Contributions Map

Contributions by Country

Country Contributions Between Climbers Crags Summits Climbs Ascents
1 USA 1526 20th November 2025 – 4th November 2026 48 20 0 88 98
2 Australia 767 27th September 2025 – 29th June 2026 6 38 0 61 33
3 United Kingdom 625 19th November 2025 – 4th November 2026 34 14 0 24 49
4 Switzerland 308 24th January 2026 – 4th November 2026 6 3 0 14 38
5 France 300 6th January 2026 – 4th November 2026 15 3 0 12 34
6 Austria 210 12th November 2025 – 22nd June 2026 5 2 0 8 22
7 Italy 163 18th November 2025 – 2nd November 2026 9 3 0 12 12
8 Pakistan 118 11th April 2026 – 26th April 2026 0 0 0 1 7
9 Spain 105 20th February 2026 – 16th May 2026 5 0 0 10 11
10 Germany 103 3rd February 2026 – 26th June 2026 7 0 0 7 10

Recent Contributions

Date Time User Type Name Attribute
2581 7th May 2026 16:29:37 UTC ben_sandi list Birthdays of Climbers list_description
Before
Lists the birthdays of each climber on the site. Climbers with non exact birth dates are excluded.
After
Lists the birthdays of each climber on the site. Climbers with non-exact birth dates are excluded.
Diff
--- before

+++ after

@@ -1 +1 @@

-Lists the birthdays of each climber on the site. Climbers with non exact birth dates are excluded.
+Lists the birthdays of each climber on the site. Climbers with non-exact birth dates are excluded.
2582 7th May 2026 16:28:14 UTC ben_sandi list Birthdays of Climbers list_type_name
Before
None
After
Misc.
2583 7th May 2026 16:28:14 UTC ben_sandi list Birthdays of Climbers list_type_id
Before
None
After
5
2584 7th May 2026 16:28:14 UTC ben_sandi list Birthdays of Climbers list_description_pretty
Before
None
After
<p>Lists the birthdays of each climber on the site. Climbers with non exact birth dates are excluded.</p>
2585 7th May 2026 16:28:14 UTC ben_sandi list Birthdays of Climbers list_definition
Before
None
After
with days as ( select gs::date as day_of_year ,to_char(gs::date, 'MM-DD') as month_day from generate_series( date '2000-01-01' ,date '2000-12-31' ,interval '1 day' ) as gs ), climbers_with_exact_dobs as ( select c.climber_id ,c.climber_name ,c.date_of_birth_start::date as date_of_birth ,to_char(c.date_of_birth_start::date, 'MM-DD') as month_day from climbers c where c.deleted_on is null and c.date_of_birth_start is not null and c.date_of_birth_start = c.date_of_birth_end ), climber_ascent_counts as ( select c.climber_id ,count(a.ascent_id) as ascent_count from climbers_with_exact_dobs c left join ascents a on a.climber_id = c.climber_id and a.deleted_on is null group by c.climber_id ), climbers_ranked_by_day as ( select c.month_day ,c.climber_id ,c.climber_name ,coalesce(cac.ascent_count, 0) as ascent_count from climbers_with_exact_dobs c left join climber_ascent_counts cac on c.climber_id = cac.climber_id ) select to_char(d.day_of_year, 'FMDD FMMonth') as "Day" ,string_agg( '<a href="/climber/' || crbd.climber_id::varchar || '">' || crbd.climber_name || '</a>' ,', ' order by crbd.ascent_count desc, crbd.climber_name asc ) as "Climbers" from days d left join climbers_ranked_by_day crbd on d.month_day = crbd.month_day group by d.day_of_year order by extract(month from d.day_of_year) ,extract(day from d.day_of_year)
Diff
--- before

+++ after

@@ -1 +1,71 @@

+with days as (
+ select
+ gs::date as day_of_year
+ ,to_char(gs::date, 'MM-DD') as month_day
+
+ from
+ generate_series(
+ date '2000-01-01'
+ ,date '2000-12-31'
+ ,interval '1 day'
+ ) as gs
+), climbers_with_exact_dobs as (
+ select
+ c.climber_id
+ ,c.climber_name
+ ,c.date_of_birth_start::date as date_of_birth
+ ,to_char(c.date_of_birth_start::date, 'MM-DD') as month_day
+
+ from
+ climbers c
+
+ where
+ c.deleted_on is null
+ and c.date_of_birth_start is not null
+ and c.date_of_birth_start = c.date_of_birth_end
+), climber_ascent_counts as (
+ select
+ c.climber_id
+ ,count(a.ascent_id) as ascent_count
+
+ from
+ climbers_with_exact_dobs c
+ left join ascents a
+ on a.climber_id = c.climber_id
+ and a.deleted_on is null
+
+ group by
+ c.climber_id
+), climbers_ranked_by_day as (
+ select
+ c.month_day
+ ,c.climber_id
+ ,c.climber_name
+ ,coalesce(cac.ascent_count, 0) as ascent_count
+
+ from
+ climbers_with_exact_dobs c
+ left join climber_ascent_counts cac
+ on c.climber_id = cac.climber_id
+)
+
+select
+ to_char(d.day_of_year, 'FMDD FMMonth') as "Day"
+ ,string_agg(
+ '<a href="/climber/' || crbd.climber_id::varchar || '">' || crbd.climber_name || '</a>'
+ ,', '
+ order by crbd.ascent_count desc, crbd.climber_name asc
+ ) as "Climbers"
+
+from
+ days d
+ left join climbers_ranked_by_day crbd
+ on d.month_day = crbd.month_day
+
+group by
+ d.day_of_year
+
+order by
+ extract(month from d.day_of_year)
+ ,extract(day from d.day_of_year)
2586 7th May 2026 16:28:14 UTC ben_sandi list Birthdays of Climbers list_description
Before
None
After
Lists the birthdays of each climber on the site. Climbers with non exact birth dates are excluded.
Diff
--- before

+++ after

@@ -1 +1 @@

-
+Lists the birthdays of each climber on the site. Climbers with non exact birth dates are excluded.
2587 7th May 2026 16:28:14 UTC ben_sandi list Birthdays of Climbers list_name
Before
None
After
Birthdays of Climbers
2588 7th May 2026 14:47:42 UTC ben_sandi list Notable Queer Climbers list_definition
Before
(Content not logged as it exceeds the threshold of 10000 characters)
After
(Content not logged as it exceeds the threshold of 10000 characters)
Diff
--- before

+++ after

@@ -130,7 +130,7 @@

<p>Alex Johnson is an American boulderer and one of the most visible openly LGBTQ+ professional climbers in the US. Johnson publicly came out in 2018 <sup>[1]</sup> and has described it as one of her proudest accomplishments.</p>

<blockquote>
-<p>I’ve been dating both boys and girls since I was 17. Growing up I didn’t think this was cool so I never talked about it. I was wrong, it is pretty cool.</p>
+<p>I’ve been dating both boys and girls since I was 17. Growing up I didn’t think this was cool so I never talked about it. I was wrong, it is pretty cool. <sup>[4]</sup></p>
</blockquote>

<h3>References</h3>
2589 7th May 2026 00:32:16 UTC ben_sandi list Crags Without Coordinates list_definition
Before
select '<a href="' || c.url || '">' || c.crag_name || '</a>' as Crag ,coalesce(cc.cnt_climbs, 0) as Climbs ,c.location_breadcrumb_pretty as Location ,case when c.ukc_url is not null then '<a href="' || c.ukc_url || '">UKC</a>' else null end as UKC ,case when c.eight_a_nu_url is not null then '<a href="' || c.eight_a_nu_url || '">8a.nu</a>' else null end as "8a.nu" ,case when w.thecrag_url is not null then '<a href="' || w.thecrag_url || '">theCrag</a>' else null end as "theCrag" ,case when w.crags27_url is not null then '<a href="' || w.crags27_url || '">27crags</a>' else null end as "27crags" from crags c left join ( select cl.crag_id ,count(*) as cnt_climbs from climbs cl where cl.deleted_on is null group by cl.crag_id ) cc on cc.crag_id = c.crag_id left join ( select cm.crag_id ,max(case when cm.value ilike '%thecrag.com%' then cm.value end) as thecrag_url ,max( case when cm.value ilike '%27crags.com%' or cm.value ilike '%thetopo.com%' then cm.value end ) as crags27_url from crag_meta cm where cm.crag_meta_key_id = 1 group by cm.crag_id ) w on w.crag_id = c.crag_id where c.deleted_on is null and c.group_crag_id is null and c.latitude is null and c.longitude is null order by coalesce(cc.cnt_climbs, 0) desc ,c.crag_name
After
select '<a href="' || c.url || '">' || c.crag_name || '</a>' as Crag ,coalesce(cc.cnt_climbs, 0) as Climbs ,case when c.ukc_url is not null then '<a href="' || c.ukc_url || '">UKC</a>' else null end as UKC ,case when c.eight_a_nu_url is not null then '<a href="' || c.eight_a_nu_url || '">8a.nu</a>' else null end as "8a.nu" ,case when w.thecrag_url is not null then '<a href="' || w.thecrag_url || '">theCrag</a>' else null end as "theCrag" ,case when w.crags27_url is not null then '<a href="' || w.crags27_url || '">27crags</a>' else null end as "27crags" from crags c left join ( select cl.crag_id ,count(*) as cnt_climbs from climbs cl where cl.deleted_on is null group by cl.crag_id ) cc on cc.crag_id = c.crag_id left join ( select cm.crag_id ,max(case when cm.value ilike '%thecrag.com%' then cm.value end) as thecrag_url ,max( case when cm.value ilike '%27crags.com%' or cm.value ilike '%thetopo.com%' then cm.value end ) as crags27_url from crag_meta cm where cm.crag_meta_key_id = 1 group by cm.crag_id ) w on w.crag_id = c.crag_id where c.deleted_on is null and c.group_crag_id is null and c.latitude is null and c.longitude is null order by coalesce(cc.cnt_climbs, 0) desc ,c.crag_name
Diff
--- before

+++ after

@@ -1,7 +1,6 @@

select
'<a href="' || c.url || '">' || c.crag_name || '</a>' as Crag
,coalesce(cc.cnt_climbs, 0) as Climbs
- ,c.location_breadcrumb_pretty as Location
,case
when c.ukc_url is not null then '<a href="' || c.ukc_url || '">UKC</a>'
else null
2590 7th May 2026 00:28:12 UTC ben_sandi list Crags Without Coordinates list_type_name
Before
Bouldering
After
Admin
2591 7th May 2026 00:28:12 UTC ben_sandi list Crags Without Coordinates list_type_id
Before
1
After
6
2592 7th May 2026 00:27:46 UTC ben_sandi list Crags Without Coordinates list_type_name
Before
None
After
Bouldering
2593 7th May 2026 00:27:46 UTC ben_sandi list Crags Without Coordinates list_type_id
Before
None
After
1
2594 7th May 2026 00:27:46 UTC ben_sandi list Crags Without Coordinates list_description_pretty
Before
None
After
<p>This is a list of crags that have no location coordinates. </p>
2595 7th May 2026 00:27:46 UTC ben_sandi list Crags Without Coordinates list_definition
Before
None
After
select '<a href="' || c.url || '">' || c.crag_name || '</a>' as Crag ,coalesce(cc.cnt_climbs, 0) as Climbs ,c.location_breadcrumb_pretty as Location ,case when c.ukc_url is not null then '<a href="' || c.ukc_url || '">UKC</a>' else null end as UKC ,case when c.eight_a_nu_url is not null then '<a href="' || c.eight_a_nu_url || '">8a.nu</a>' else null end as "8a.nu" ,case when w.thecrag_url is not null then '<a href="' || w.thecrag_url || '">theCrag</a>' else null end as "theCrag" ,case when w.crags27_url is not null then '<a href="' || w.crags27_url || '">27crags</a>' else null end as "27crags" from crags c left join ( select cl.crag_id ,count(*) as cnt_climbs from climbs cl where cl.deleted_on is null group by cl.crag_id ) cc on cc.crag_id = c.crag_id left join ( select cm.crag_id ,max(case when cm.value ilike '%thecrag.com%' then cm.value end) as thecrag_url ,max( case when cm.value ilike '%27crags.com%' or cm.value ilike '%thetopo.com%' then cm.value end ) as crags27_url from crag_meta cm where cm.crag_meta_key_id = 1 group by cm.crag_id ) w on w.crag_id = c.crag_id where c.deleted_on is null and c.group_crag_id is null and c.latitude is null and c.longitude is null order by coalesce(cc.cnt_climbs, 0) desc ,c.crag_name
Diff
--- before

+++ after

@@ -1 +1,71 @@

+select
+ '<a href="' || c.url || '">' || c.crag_name || '</a>' as Crag
+ ,coalesce(cc.cnt_climbs, 0) as Climbs
+ ,c.location_breadcrumb_pretty as Location
+ ,case
+ when c.ukc_url is not null then '<a href="' || c.ukc_url || '">UKC</a>'
+ else null
+ end as UKC
+ ,case
+ when c.eight_a_nu_url is not null then '<a href="' || c.eight_a_nu_url || '">8a.nu</a>'
+ else null
+ end as "8a.nu"
+ ,case
+ when w.thecrag_url is not null then '<a href="' || w.thecrag_url || '">theCrag</a>'
+ else null
+ end as "theCrag"
+ ,case
+ when w.crags27_url is not null then '<a href="' || w.crags27_url || '">27crags</a>'
+ else null
+ end as "27crags"
+
+from
+ crags c
+ left join (
+ select
+ cl.crag_id
+ ,count(*) as cnt_climbs
+
+ from
+ climbs cl
+
+ where
+ cl.deleted_on is null
+
+ group by
+ cl.crag_id
+ ) cc
+ on cc.crag_id = c.crag_id
+ left join (
+ select
+ cm.crag_id
+ ,max(case when cm.value ilike '%thecrag.com%' then cm.value end) as thecrag_url
+ ,max(
+ case
+ when cm.value ilike '%27crags.com%'
+ or cm.value ilike '%thetopo.com%'
+ then cm.value
+ end
+ ) as crags27_url
+
+ from
+ crag_meta cm
+
+ where
+ cm.crag_meta_key_id = 1
+
+ group by
+ cm.crag_id
+ ) w
+ on w.crag_id = c.crag_id
+
+where
+ c.deleted_on is null
+ and c.group_crag_id is null
+ and c.latitude is null
+ and c.longitude is null
+
+order by
+ coalesce(cc.cnt_climbs, 0) desc
+ ,c.crag_name
2596 7th May 2026 00:27:46 UTC ben_sandi list Crags Without Coordinates list_description
Before
None
After
This is a list of crags that have no location coordinates.
Diff
--- before

+++ after

@@ -1 +1 @@

-
+This is a list of crags that have no location coordinates.
2597 7th May 2026 00:27:46 UTC ben_sandi list Crags Without Coordinates list_name
Before
None
After
Crags Without Locations
2598 6th May 2026 23:41:29 UTC ben_sandi list Notable Queer Climbers list_definition
Before
(Content not logged as it exceeds the threshold of 10000 characters)
After
(Content not logged as it exceeds the threshold of 10000 characters)
Diff
--- before

+++ after

@@ -71,7 +71,7 @@

,$taylor$
<p>Taylor Parsons is a trans woman and the first Australian to climb V15.</p>

-<p>Taylor spent many years as an elite climber while hiding her identity, including from herself, and has since transitioned. On her Jam Crack Climbing Podcast episode<sup>[1]</sup>, Taylor told her deeply personal story about identity, climbing, transition, and motherhood, including discussion of suicide and self-harm.</p>
+<p>Taylor spent many years as an elite climber while hiding her identity, including from herself, and has since transitioned. On her Jam Crack Climbing Podcast episode <sup>[1]</sup>, Taylor told her deeply personal story about identity, climbing, transition, and motherhood, including discussion of suicide and self-harm.</p>

<h3>References</h3>

@@ -127,7 +127,7 @@

,(
'Alex Johnson'
,$alex$
-<p>Alex Johnson is an American boulderer and one of the most visible openly LGBTQ+ professional climbers in the US. Johnson publicly came out in 2018<sup>[1]</sup> and has described it as one of her proudest accomplishments.</p>
+<p>Alex Johnson is an American boulderer and one of the most visible openly LGBTQ+ professional climbers in the US. Johnson publicly came out in 2018 <sup>[1]</sup> and has described it as one of her proudest accomplishments.</p>

<blockquote>
<p>I’ve been dating both boys and girls since I was 17. Growing up I didn’t think this was cool so I never talked about it. I was wrong, it is pretty cool.</p>
2599 6th May 2026 23:39:36 UTC ben_sandi climber Taylor Parsons notes_pretty
Before
<p>First Australian to climb V15</p> <p>From Taylors Instagram:</p> <blockquote> <p>For most of my life, I pretended to be happy. The truth is, I was far from it.<br> The journey to womanhood hasn't been easy. I've lost friends. I've lost relationships. But the hardest part has been staying true to myself. </p> <p>Through it all, I've kept showing up, with honesty and heart. I'm proud of that. </p> <p>I'm a mum to three beautiful kids.<br> I've been a professional climber, competing in world cups around the world, making finals and semi finals while representing Australia.<br> Established what was at the time, some of the hardest rock climbs and boulder problems in the world up to V15.<br> Stood on the podium at prestigious Arco Rock Master climbing comp in Italy for 3rd place. And the Bloc Master comp in Innsbruck for 2nd place.<br> I co-authored the Grampians bouldering guide book.<br> I was An elite-level cyclist. An elite CrossFitter. A Jiu-Jitsu practitioner.<br> A IRATA level 3 rope access technician working across England, Europe, China, the U.S., Canada, Australia, and the Caribbean. An IRATA Rope Access Instructor.<br> Manager of Protective Security for Westpac Bank in the corporate sector.<br> A personal trainer. Route setter. Nurse. Electrician. Plasterer. Pest control tech.<br> I've built and run my own businesses, a rope access company, a CrossFit gym, a pest control company, a clothing brand.<br> And now, I've launched a new rope access firm with an amazing and trusted friend! a company we're determined to grow into one of the industry's best. @skytech_projects </p> <p>This life hasn't been easy. But it's been f*cking real.<br> And I'm still here. Still growing. Still choosing truth over comfort, every single day.</p> </blockquote> <h3>References</h3> <p>[1] Podcast with <a href="/climber/702/niall-grimes" rel="noopener noreferrer">Niall Grimes</a>, originally recorded in 2021 and then re-released in 2025 <a href="https://open.spotify.com/episode/5NHG7EfwMMQnphpUyAIm2Z" rel="noopener noreferrer">https://open.spotify.com/episode/5NHG7EfwMMQnphpUyAIm2Z</a></p>
After
<p>The first Australian to climb V15</p> <p>From Taylors Instagram:</p> <blockquote> <p>For most of my life, I pretended to be happy. The truth is, I was far from it.<br> The journey to womanhood hasn't been easy. I've lost friends. I've lost relationships. But the hardest part has been staying true to myself. </p> <p>Through it all, I've kept showing up, with honesty and heart. I'm proud of that. </p> <p>I'm a mum to three beautiful kids.<br> I've been a professional climber, competing in world cups around the world, making finals and semi finals while representing Australia.<br> Established what was at the time, some of the hardest rock climbs and boulder problems in the world up to V15.<br> Stood on the podium at prestigious Arco Rock Master climbing comp in Italy for 3rd place. And the Bloc Master comp in Innsbruck for 2nd place.<br> I co-authored the Grampians bouldering guide book.<br> I was An elite-level cyclist. An elite CrossFitter. A Jiu-Jitsu practitioner.<br> A IRATA level 3 rope access technician working across England, Europe, China, the U.S., Canada, Australia, and the Caribbean. An IRATA Rope Access Instructor.<br> Manager of Protective Security for Westpac Bank in the corporate sector.<br> A personal trainer. Route setter. Nurse. Electrician. Plasterer. Pest control tech.<br> I've built and run my own businesses, a rope access company, a CrossFit gym, a pest control company, a clothing brand.<br> And now, I've launched a new rope access firm with an amazing and trusted friend! a company we're determined to grow into one of the industry's best. @skytech_projects </p> <p>This life hasn't been easy. But it's been f*cking real.<br> And I'm still here. Still growing. Still choosing truth over comfort, every single day.</p> </blockquote> <h3>References</h3> <p>[1] Podcast with <a href="/climber/702/niall-grimes" rel="noopener noreferrer">Niall Grimes</a>, originally recorded in 2021 and then re-released in 2025 <a href="https://open.spotify.com/episode/5NHG7EfwMMQnphpUyAIm2Z" rel="noopener noreferrer">https://open.spotify.com/episode/5NHG7EfwMMQnphpUyAIm2Z</a></p>
2600 6th May 2026 23:39:36 UTC ben_sandi climber Taylor Parsons notes
Before
First Australian to climb V15 From Taylors Instagram: > For most of my life, I pretended to be happy. The truth is, I was far from it. > The journey to womanhood hasn't been easy. I've lost friends. I've lost relationships. But the hardest part has been staying true to myself. > > Through it all, I've kept showing up, with honesty and heart. I'm proud of that. > > I'm a mum to three beautiful kids. > I've been a professional climber, competing in world cups around the world, making finals and semi finals while representing Australia. > Established what was at the time, some of the hardest rock climbs and boulder problems in the world up to V15. > Stood on the podium at prestigious Arco Rock Master climbing comp in Italy for 3rd place. And the Bloc Master comp in Innsbruck for 2nd place. > I co-authored the Grampians bouldering guide book. > I was An elite-level cyclist. An elite CrossFitter. A Jiu-Jitsu practitioner. > A IRATA level 3 rope access technician working across England, Europe, China, the U.S., Canada, Australia, and the Caribbean. An IRATA Rope Access Instructor. > Manager of Protective Security for Westpac Bank in the corporate sector. > A personal trainer. Route setter. Nurse. Electrician. Plasterer. Pest control tech. > I've built and run my own businesses, a rope access company, a CrossFit gym, a pest control company, a clothing brand. > And now, I've launched a new rope access firm with an amazing and trusted friend! a company we're determined to grow into one of the industry's best. @skytech_projects > > This life hasn't been easy. But it's been f*cking real. > And I'm still here. Still growing. Still choosing truth over comfort, every single day. ### References [1] Podcast with [Niall Grimes](/climber/702/niall-grimes), originally recorded in 2021 and then re-released in 2025 [https://open.spotify.com/episode/5NHG7EfwMMQnphpUyAIm2Z](https://open.spotify.com/episode/5NHG7EfwMMQnphpUyAIm2Z)
After
The first Australian to climb V15 From Taylors Instagram: > For most of my life, I pretended to be happy. The truth is, I was far from it. > The journey to womanhood hasn't been easy. I've lost friends. I've lost relationships. But the hardest part has been staying true to myself. > > Through it all, I've kept showing up, with honesty and heart. I'm proud of that. > > I'm a mum to three beautiful kids. > I've been a professional climber, competing in world cups around the world, making finals and semi finals while representing Australia. > Established what was at the time, some of the hardest rock climbs and boulder problems in the world up to V15. > Stood on the podium at prestigious Arco Rock Master climbing comp in Italy for 3rd place. And the Bloc Master comp in Innsbruck for 2nd place. > I co-authored the Grampians bouldering guide book. > I was An elite-level cyclist. An elite CrossFitter. A Jiu-Jitsu practitioner. > A IRATA level 3 rope access technician working across England, Europe, China, the U.S., Canada, Australia, and the Caribbean. An IRATA Rope Access Instructor. > Manager of Protective Security for Westpac Bank in the corporate sector. > A personal trainer. Route setter. Nurse. Electrician. Plasterer. Pest control tech. > I've built and run my own businesses, a rope access company, a CrossFit gym, a pest control company, a clothing brand. > And now, I've launched a new rope access firm with an amazing and trusted friend! a company we're determined to grow into one of the industry's best. @skytech_projects > > This life hasn't been easy. But it's been f*cking real. > And I'm still here. Still growing. Still choosing truth over comfort, every single day. ### References [1] Podcast with [Niall Grimes](/climber/702/niall-grimes), originally recorded in 2021 and then re-released in 2025 [https://open.spotify.com/episode/5NHG7EfwMMQnphpUyAIm2Z](https://open.spotify.com/episode/5NHG7EfwMMQnphpUyAIm2Z)
Diff
--- before

+++ after

@@ -1,4 +1,4 @@

-First Australian to climb V15
+The first Australian to climb V15

From Taylors Instagram:
> For most of my life, I pretended to be happy. The truth is, I was far from it.

< Page 130 >