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
2701 4th May 2026 01:22:20 UTC ben_sandi climb Uncertainty crag_name
Before
None
After
221
2702 4th May 2026 01:22:20 UTC ben_sandi climb Uncertainty crag_id
Before
None
After
34231
2703 4th May 2026 01:22:05 UTC ben_sandi climb Severed Arm crag_name
Before
None
After
221
2704 4th May 2026 01:22:05 UTC ben_sandi climb Severed Arm crag_id
Before
None
After
34231
2705 4th May 2026 01:21:50 UTC ben_sandi climb Saddle on a Mustang crag_name
Before
None
After
221
2706 4th May 2026 01:21:50 UTC ben_sandi climb Saddle on a Mustang crag_id
Before
None
After
34231
2707 4th May 2026 01:21:40 UTC ben_sandi climb Morphine crag_name
Before
None
After
221
2708 4th May 2026 01:21:40 UTC ben_sandi climb Morphine crag_id
Before
None
After
34231
2709 4th May 2026 01:21:28 UTC ben_sandi climb Cradle to the Grave crag_name
Before
None
After
221
2710 4th May 2026 01:21:28 UTC ben_sandi climb Cradle to the Grave crag_id
Before
None
After
34231
2711 4th May 2026 01:21:10 UTC ben_sandi climb Afterlife crag_name
Before
None
After
221
2712 4th May 2026 01:21:10 UTC ben_sandi climb Afterlife crag_id
Before
None
After
34231
2713 4th May 2026 01:20:51 UTC ben_sandi crag 221 eight_a_nu_url
Before
None
After
https://www.8a.nu/crags/bouldering/united-states/221
Diff
--- before

+++ after

@@ -1 +1 @@

-
+https://www.8a.nu/crags/bouldering/united-states/221
2714 4th May 2026 01:20:38 UTC ben_sandi crag 221 Website
Before
None
After
https://kaya-app.kayaclimb.com/location/221-14492844
2715 4th May 2026 01:20:23 UTC ben_sandi crag 221 crag_name
Before
None
After
221
2716 4th May 2026 01:15:40 UTC ben_sandi crag Vat Burn longitude
Before
None
After
-2.9558
2717 4th May 2026 01:15:40 UTC ben_sandi crag Vat Burn latitude
Before
None
After
57.0874
2718 3rd May 2026 18:10:33 UTC ben_sandi list Climbs Without a Crag list_definition
Before
select '<a href="' || c.url || '">' || c.climb_name || '</a>' as Climb ,g.grade || ' ' || ct.climb_type as Grade ,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 c.eight_a_nu_url is not null then '<a href="' || substring(c.eight_a_nu_url from '^(.+)/sectors/') || '">' || initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) || '</a>' else null end as "8a.nu Crag" ,case when c.eight_a_nu_url is not null then '<a href="' || substring(c.eight_a_nu_url from '^(.+)/sectors/') || '/routes?sector=' || split_part(c.eight_a_nu_url, '/', 9) || '">' || initcap(replace(split_part(c.eight_a_nu_url, '/', 9), '-', ' ')) || '</a>' else null end as "8a.nu Sector" ,case when w.thecrag_url is not null then '<a href="' || w.thecrag_url || '">thecrag.com</a>' else null end as "theCrag" ,case when w.mountain_project_url is not null then '<a href="' || w.mountain_project_url || '">Mountain Project</a>' else null end as "Mountain Project" from climbs c inner join grades g on c.grade_id = g.grade_id inner join climb_types ct on c.climb_type_id = ct.climb_type_id left join ( select cm.climb_id ,max(case when cm.value ilike '%thecrag.com%' then cm.value end) as thecrag_url ,max(case when cm.value ilike '%mountainproject.com%' then cm.value end) as mountain_project_url from climb_meta cm where cm.climb_meta_key_id = 30 group by cm.climb_id ) w on w.climb_id = c.climb_id where c.deleted_on is null and c.crag_id is null order by c.climb_name
After
select '<a href="' || c.url || '">' || c.climb_name || '</a>' as Climb ,g.grade || ' ' || ct.climb_type as Grade ,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 c.eight_a_nu_url is not null then '<a href="' || substring(c.eight_a_nu_url from '^(.+)/sectors/') || '">' || initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) || '</a>' else null end as "8a.nu Crag" ,case when c.eight_a_nu_url is not null then '<a href="' || substring(c.eight_a_nu_url from '^(.+)/sectors/') || '/routes?sector=' || split_part(c.eight_a_nu_url, '/', 9) || '">' || initcap(replace(split_part(c.eight_a_nu_url, '/', 9), '-', ' ')) || '</a>' else null end as "8a.nu Sector" ,case when w.thecrag_url is not null then '<a href="' || w.thecrag_url || '">thecrag.com</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 climbs c inner join grades g on c.grade_id = g.grade_id inner join climb_types ct on c.climb_type_id = ct.climb_type_id left join ( select cm.climb_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 climb_meta cm where cm.climb_meta_key_id = 30 group by cm.climb_id ) w on w.climb_id = c.climb_id where c.deleted_on is null and c.crag_id is null order by c.climb_name
Diff
--- before

+++ after

@@ -1,64 +1,81 @@

-select
- '<a href="' || c.url || '">' || c.climb_name || '</a>' as Climb
- ,g.grade || ' ' || ct.climb_type as Grade
- ,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 c.eight_a_nu_url is not null then
- '<a href="' ||
- substring(c.eight_a_nu_url from '^(.+)/sectors/') ||
- '">' ||
- initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) ||
- '</a>'
- else null
- end as "8a.nu Crag"
- ,case when c.eight_a_nu_url is not null then
- '<a href="' ||
- substring(c.eight_a_nu_url from '^(.+)/sectors/') ||
- '/routes?sector=' ||
- split_part(c.eight_a_nu_url, '/', 9) ||
- '">' ||
- initcap(replace(split_part(c.eight_a_nu_url, '/', 9), '-', ' ')) ||
- '</a>'
- else null
- end as "8a.nu Sector"
- ,case
- when w.thecrag_url is not null then '<a href="' || w.thecrag_url || '">thecrag.com</a>'
- else null
- end as "theCrag"
- ,case
- when w.mountain_project_url is not null then '<a href="' || w.mountain_project_url || '">Mountain Project</a>'
- else null
- end as "Mountain Project"
+
+
+
+
+
+
+select
+ '<a href="' || c.url || '">' || c.climb_name || '</a>' as Climb
+ ,g.grade || ' ' || ct.climb_type as Grade
+ ,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 c.eight_a_nu_url is not null then
+ '<a href="' ||
+ substring(c.eight_a_nu_url from '^(.+)/sectors/') ||
+ '">' ||
+ initcap(replace(split_part(c.eight_a_nu_url, '/', 7), '-', ' ')) ||
+ '</a>'
+ else null
+ end as "8a.nu Crag"
+ ,case
+ when c.eight_a_nu_url is not null then
+ '<a href="' ||
+ substring(c.eight_a_nu_url from '^(.+)/sectors/') ||
+ '/routes?sector=' ||
+ split_part(c.eight_a_nu_url, '/', 9) ||
+ '">' ||
+ initcap(replace(split_part(c.eight_a_nu_url, '/', 9), '-', ' ')) ||
+ '</a>'
+ else null
+ end as "8a.nu Sector"
+ ,case
+ when w.thecrag_url is not null then '<a href="' || w.thecrag_url || '">thecrag.com</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
+ climbs c
+ inner join grades g
+ on c.grade_id = g.grade_id
+ inner join climb_types ct
+ on c.climb_type_id = ct.climb_type_id
+ left join (
+ select
+ cm.climb_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
+ climb_meta cm
+
+ where
+ cm.climb_meta_key_id = 30
+
+ group by
+ cm.climb_id
+ ) w
+ on w.climb_id = c.climb_id
+
+where
+ c.deleted_on is null
+ and c.crag_id is null
+
+order by
+ c.climb_name
+
+
+

-from
- climbs c
- inner join grades g
- on c.grade_id = g.grade_id
- inner join climb_types ct
- on c.climb_type_id = ct.climb_type_id
- left join (
- select
- cm.climb_id
- ,max(case when cm.value ilike '%thecrag.com%' then cm.value end) as thecrag_url
- ,max(case when cm.value ilike '%mountainproject.com%' then cm.value end) as mountain_project_url
-
- from
- climb_meta cm
-
- where
- cm.climb_meta_key_id = 30
-
- group by
- cm.climb_id
- ) w
- on w.climb_id = c.climb_id
-
-where
- c.deleted_on is null
- and c.crag_id is null
-
-order by
- c.climb_name
-
2719 2nd May 2026 22:16:40 UTC ben_sandi ascent Nalle Hukkataival's ascent of Wave Swoop notes_pretty
Before
<h3>References</h3> <p>[1] [1] <a href="https://youtu.be/pj02Dk4zayU?t=340">https://youtu.be/pj02Dk4zayU?t=340</a></p>
After
<h3>References</h3> <p>[1] <a href="https://youtu.be/pj02Dk4zayU?t=340" rel="noopener noreferrer">https://youtu.be/pj02Dk4zayU?t=340</a></p>
2720 2nd May 2026 22:16:40 UTC ben_sandi ascent Nalle Hukkataival's ascent of Wave Swoop notes
Before
### References [1] [1] [https://youtu.be/pj02Dk4zayU?t=340](https://youtu.be/pj02Dk4zayU?t=340)
After
### References [1] [https://youtu.be/pj02Dk4zayU?t=340](https://youtu.be/pj02Dk4zayU?t=340)
Diff
--- before

+++ after

@@ -1,3 +1,3 @@

-### References
-
-[1] [1] [https://youtu.be/pj02Dk4zayU?t=340](https://youtu.be/pj02Dk4zayU?t=340)
+### References
+
+[1] [https://youtu.be/pj02Dk4zayU?t=340](https://youtu.be/pj02Dk4zayU?t=340)

< Page 136 >