Release Notes
Platform updates, new features, and improvements.
Platform updates, new features, and improvements.
Event organizers can email everyone who RSVP'd going straight from the event page — and the Follow button, which never did anything, is gone.
Turns out the Follow button was a doorbell wired to nothing. Emailing the folks who actually signed the list — that's how it should have worked from the start.
Event organizers now have an Email attendees button on the event page. Write the message once and it:
Event announcement emails used to go out to whoever had "followed" the event. Now they go to the people who RSVP'd going. If you're attending, you're in the loop — no extra button to remember.
The Follow button is retired.
Follower records were removed along with the feature. RSVPs were never tied to following, so nobody's attendance changed.
Trip and event updates and discussion now share one feed, and leaders can pin a notice to the top and email everyone in the same step.
Two boards for one trip meant half the club read the wrong one. Now it's one board with the important part nailed where you can't miss it — took us long enough.
Until now every trip and event had two places to talk: an Updates section for official announcements and a Discussion for everything else. Plans have a way of landing in whichever one you weren't reading. They're now a single conversation.
Trip leaders and trip managers — and on events, the organizers — can now pin any post that starts a thread.
The composer has a new checkbox: Pin to top (emails all participants) on trips, Pin to top (emails everyone going) on events.
Along the way the discussion got a cleanup: posts no longer carry category labels, the mobile feed runs edge to edge, and the dividers between posts behave themselves.
Existing official updates were converted into regular discussion posts during the merge. Nothing was removed, and updates that were emailed keep that record.
That checkbox emails the whole roster, so read your post twice before you tick it. A golf pencil never sent forty emails by accident.
Emails to trip participants and event attendees now arrive with real bold, italics, and links — and you can preview the exact email before sending.
Writing something in bold or adding a link used to arrive in the email as the raw symbols you typed around it. Emails now render the formatting: bold is bold, links are clickable.
The email composer for trip participants and event attendees now has a formatting toolbar. Click a button, get the formatting — no need to remember which squiggle makes italics.
The composer's preview now shows the exact email your recipients will get — same layout, same formatting — instead of an approximation. What you approve is what lands.
Asterisks scattered through an email read like somebody swearing in Morse code. Glad the bold is just bold now.
Mentioning someone shows their name everywhere it appears — in your notifications, in previews, and in the box while you type.
When you mention someone in a discussion or a post, the site stores a hidden tag alongside their name so it knows who to notify. In a few places that tag leaked through and showed up as raw text instead of the person's name.
Mentions now read as the person's name everywhere: in your notifications, in previews, and in the box while you're writing. Notifications you already had are fixed too, not only new ones.
One thing worth knowing, since it changes how mentions behave: what you see in the box is now exactly what gets sent. If you delete someone's name from your message before posting, they won't be notified. Previously a leftover hidden tag could still notify someone whose name you'd removed.
Volunteer names now show under each event role, volunteers get their own tag in the who's-going list, and claiming a role RSVPs you automatically.
Used to be the volunteer list lived on a clipboard in somebody's truck bed, and the truck left at six. This is an improvement, and it only took thirty years.
Event pages with volunteer roles now show who actually stepped up — and claiming a role handles your RSVP for you, since nobody in recorded history has hauled a cooler to an event they weren't attending.
Each role in the Volunteer roles section now lists who claimed it, with a small pending tag on requests the event lead hasn't gotten around to blessing yet. Hit Show volunteers and the names drop in from the ceiling like loose breakdown — every caver's favorite thing to see overhead. Names are visible to active members only; everyone else gets the filled counts and is free to wonder.
The Show who's going reveal now tags volunteers with their own Volunteer label and color, so you can tell at a glance who's coming to enjoy the event and who's coming to work it. To find out which job each of them got roped into, check the volunteer section.
Volunteering for an event now marks you as going automatically — you were always coming, you're the one carrying the water jugs; the system just finally believes it. Withdrawing from a role keeps your RSVP in place, so if your plans fall through entirely, cancel the RSVP separately.
Stalactites are supposed to hold tight to the ceiling. Ours apparently didn't get the memo.
Post to the club, share trip photo albums, discuss trips and events, get notified when you're mentioned, and follow it all in a rebuilt home feed.
For forty years the club's news lived on a corkboard by the gear room and whatever got passed hand to hand. Putting it all on one page the whole membership can read — that's an upgrade I won't argue with.
This is the big one. The grotto site is no longer just a trip board — it's a place where the club talks to itself. Post what you're up to, share the photos from Saturday's trip, hash out an event in the comments, and see all of it land in one feed.
Your member home is now a live feed built around what the club is actually doing. Posts, trip and event discussions, new albums, and featured events flow in newest-first, and a redesigned layout carries you down through the day's activity like a descent — the deeper you scroll, the further back you go.
Every member now has a posts section on their profile and can broadcast to the club feed.
Every trip and event now has a shared photo album that everyone on the roster can add to — the answer to "send me the pics after."
Every trip and event now has a discussion space, and it flows into your feed — no more chasing plans through group texts and half-remembered phone calls.
Type @ in any trip or event discussion, update, or comment and you'll get name suggestions for the people who can actually see that thread. Whoever you mention gets a notification in their bell — and when you reply to someone, they're mentioned automatically, so the person you're answering knows.
Event managers can now feature an event to put it front and center. Featured events pin to the top of the member feed, and — for public, everyone-welcome events — ride a rotating deck-carousel hero on the site's public homepage. There's a cap, and the spotlight clears itself once the event has passed.
Just remember the cave doesn't care how many reactions the photo gets. Log the trip, pack it out, and let the pictures come second.
The required-gear list on a trip is now a free-form field that starts from the standard kit and you can edit however the cave calls for.
Standard kit hasn't changed in thirty years. Being able to scribble "bring the 45, the pit's deeper than the book says" right on the trip — that helps.
When you create a trip, the required gear is now a single free-form field instead of a fixed list plus extras.
New trips prefill the field with the standard kit, so you're never starting from a blank box. From there, write whatever this cave actually calls for — add the long rope, flag the tight spot, drop a line that doesn't apply. It supports Markdown, so lists and emphasis render cleanly on the trip page.
Trips you've already posted were backfilled so their gear list shows exactly what it showed before — nothing to redo.
Confirming a participant's permit now updates their status on the roster immediately, without reloading the page.
On the participants page, marking someone's permit as confirmed used to leave them showing "Pending Permit" until you reloaded the whole page — so it looked like nothing had happened.
Now the roster updates the moment you confirm a permit. The participant's status flips right there on the page, no reload needed.
Trip managers get a notification when a new trip is published, and editing a published trip no longer sends one.
Time was, you heard about a new trip from a fresh card tacked to the grotto board. Now the folks who keep the schedule get word the moment it's posted.
If you help run the grotto's schedule, the app now tells you when a trip goes up.
The trip board and calendar now show the same signup count as the trip's own page.
The trip board and the calendar could show one fewer signup than the trip's own page. It happened on trips with a co-leader who hadn't been accepted yet but had also signed up as a participant — their seat was dropped from the count on the board while it still counted on the trip page.
Now every place that shows how many people are signed up counts them the same way, so the number on a trip card matches the number on the trip itself.
The rock rating buttons on the trip report form now have names a screen reader can announce.
When you write a trip report, you rate it on things like difficulty, fun, mud, and scenery with a row of five rock icons. Those buttons had no labels, so a screen reader couldn't say which rock was which or what you'd picked.
Each rock now announces its rating — "Difficulty: 3 of 5," and so on — and reports whether it's the one currently selected, so the ratings can be set without seeing the screen.
The cancel link in your signup email now asks you to confirm, so it can't be triggered by accident.
A signup ought to come off the list when you say so — not when some machine reads your mail.
The cancellation link in your trip-signup confirmation email is safer now.
A trip leader's email and phone show only to the people meant to see them.
A leader's phone number isn't for the whole mountain to have. Good to see it fenced off.
Trip leaders' contact details are now shared more carefully.
Fix a typo or take back a message in trip chat, and chat links now open straight to the conversation.
Used to be once you hollered it down the passage, it was said and done. Now you get a do-over.
Trip chat now lets you tidy up after yourself, and getting into a chat is quicker.
Trip leaders, co-leaders, and trip managers can email everyone on the roster straight from the participants page.
Used to be a change of plans meant a phone tree and a note left under somebody's wiper blade. One message to the whole roster beats that.
If you run trips, you can now reach everyone signed up without leaving the participants page.
The participants page has a new Email participants button. Write your message, confirm, and it goes out as an email to everyone signed up who hasn't turned off trip email — a weather call, a change of meeting spot, a gear reminder. It's also recorded as an official update on the trip, so there's a record of what was sent.
The button tells you it has nobody to reach when a trip has no signups yet, so you're not emailing an empty room.
Posting an official update used to be the trip leader's job alone. Now the leader's accepted co-leaders and the grotto's trip managers can post official updates — and send these emails — as well. If you're helping run a trip, you no longer have to track down the lead to get word out.
Who counts as an official-update sender is now decided by one shared rule across the trip discussion and the participants page, so the people who can post an update and the people who can email the roster are always the same set.
Participant roster rows now stack name and actions so long names stop wrapping mid-word, and permit buttons read cleaner.
On the participants page, the permit roster used to cram each person's name, status, and action buttons onto one line. When the buttons got crowded they starved the name column, so longer names broke mid-word and multi-word status badges collapsed into a smudge.
Each row now stacks: the name and its status pill sit on top, with the actions on their own line below. Status badges stay on a single line, the "member hasn't notified yet" note wraps as a normal caption, and the permit buttons drop the participant's name from their labels — it's already shown on the row — so the whole thing is easier to scan.
Record your vertical proficiency, descenders, and ascending systems on your profile so members can see who's ready for rope.
Used to be you found out who could pass a knot when they were already hanging off one, in the dark, with the group waiting. Writing it down ahead of time is the smarter play.
Your profile now carries a caving-skills section: a plain record of what you can do on rope and the gear you run. Fill in your own from your profile page, and it shows up for other members when they look you up.
Eight vertical skills — changeover, rebelay, redirect, knot pass, Tyrolean traverse, J-hang, guided rappel, and guided climb — each get a single honest rating:
Leave anything blank that doesn't apply. Nothing is filled in for you.
Check off the descenders you use — rack, micro-rack, bobbin, Stop, Simple, Munter hitch — and the ascending systems you climb — frog, ropewalker, Texas, Mitchell. If you run something that isn't on the list, there's a free-text field for each so you can add it.
You can also note the year you started caving and the year you started doing vertical, and your profile works out how long that's been.
What you enter is visible to other members on your profile, so a trip leader sizing up a roster can see at a glance who's comfortable on rope and who's still learning. You edit your own; you can't change anyone else's.
A checkbox says you own a rack. It doesn't say you can rig it on a windy lip with cold hands. Leaders still have to watch the rope.
Trip, event, and email times now show in Eastern with an "ET" label and read the same for everyone, and editing a trip no longer drifts its saved time.
A trip time ought to mean the same thing whether you read it in Chattanooga or three states over. Took a while, but now it does.
Times on the site used to render in whatever timezone your phone or computer happened to be set to. A trip that started at 9:00 PM in Chattanooga could read as 8:00 PM for a member on Central time, with nothing on the page to say which zone you were looking at. Now every absolute time is shown in the grotto's home zone, Eastern, with a clear ET label — and it reads the same for every member no matter what device or timezone they're on.
There was a bug where editing a trip could silently move its start or end time by your device's timezone offset — open a trip to fix a typo, save, and the time would quietly drift. That's fixed. Trip and event times now stay put when you edit, and when you enter a time in a form it's read as Eastern, matching what gets displayed.
Nothing about how times are stored changed — the fix is in how they're shown and read back. A few intentional spots were left alone: membership expiration dates and "5 minutes ago"-style relative times are unchanged, and the "Add to calendar" links you hand off to Google, Outlook, or Apple Calendar were already correct and stay as they are.
On a skinny phone, a trip's full start–end time now shows on its own row on the trip page instead of being cut off.
On a narrow phone, the trip page used to squeeze the date and time into a small column next to the cave, difficulty, and spots — which cut off the end of the time. An overnight trip might read "10:29 PM – 3:…" with no way to see when it actually ended.
Now the date and time get their own full-width row at the top of that bar, so the whole range is always visible. The cave, difficulty, and spots sit in a wider row below, which also stops longer labels like "Advanced" from being trimmed.
Event pages now show a prominent RSVP and who's-going panel, plus the trips and volunteer roles that belong to the event.
A name on a list used to mean a name on a clipboard. Now you can see the whole party before you commit.
Event pages got a real overhaul. The cramped attendance card in the corner is gone, replaced by a proper RSVP and roster, and the page now shows the trips and volunteer work that belong to the event.
For workdays and events that need hands, the volunteer roles now sit in the main column with a clear count of open spots, instead of being buried in the sidebar.
Event managers can attach and detach existing trips directly from the event create and edit forms.
Used to take a stack of index cards and a parking-lot holler to pin trips to a gathering. One form does it now.
Event managers can now pull trips into an event straight from the event form, instead of opening and editing each trip on its own. The form lists the trips that are eligible to attach, and you can attach or detach them as you build or edit the event.
The month view is rebuilt to be legible on phone and desktop, with color-coded entries and a tap-to-open day view.
Spent years reading topo maps by headlamp. A calendar I can read at a glance is the least a screen can do.
The calendar's month view was hard to read — crammed on a phone, and bloated with repetitive tags on desktop. It's been rebuilt to be legible at any size.
Private draft trips no longer show up on the calendar — a trip stays yours alone until it's published.
Events can hold a set of trips, and one RSVP to the event unlocks signup for all of them.
Used to be a "cave-in" was a weekend, a cooler, and a clipboard nailed to a tree. Now the whole thing hangs together on one page.
The grotto runs gatherings that are really a bundle of trips under one banner — a regional meet, a multi-day cave-in. Until now those trips floated on the calendar with no connection to the event they belonged to. Now an event can act as a container for its trips, and your RSVP to the event is the key that unlocks them.
When a trip is part of an event, signing up works in two steps:
If you already signed up for a trip before it was attached to an event, you stay signed up — and you're added to the event's RSVP list automatically, so you show up as going and won't be asked to RSVP again.
On the calendar, an event and its trips now read as one unit instead of scattered entries. The event shows how many trips it holds, and opening it lists them with their own signup buttons — or a single "RSVP to unlock" line if you haven't RSVP'd yet.
If you cancel your RSVP to an event, you're also stepping back from its trips. Before anything happens you'll see exactly which trip signups that will cancel and you confirm it — no silent surprises, and anyone on a waitlist behind you gets promoted as usual.
When an event is cancelled, signup for its trips closes on its own — the trips themselves aren't deleted, so the page still tells the story. If the event comes back on, signups reopen.
Won't pretend I never signed up for three caves and forgot two of them. The list it shows you before cancelling an RSVP is a kindness.
If your membership expires while you're signed up for a members-only trip, you keep access to the trip details.
Rope's only as good as the knot. But we don't cut it while you're still on rappel.
If you signed up for a members-only trip and your membership expired before the trip date, the site locked you out of the trip detail page — even though you were still on the roster. You couldn't see the meeting location, sign your permit, or cancel your own signup.
The membership gate now checks whether you have an active signup before locking the trip. If you're already signed up, you keep full access to the trip details regardless of your current membership status.
Anyone whose annual membership lapses between signing up for a trip and the trip date. Previously you'd see a locked card with no way to interact. Now you see the full trip page as expected.
Locked-content messages now consistently reference the $15/year membership instead of the retired vouching system.
Several surfaces that gate content behind membership still referenced the old recognition/vouching path that was retired on May 14. These now consistently describe the actual gate: membership at $15/year, with a link to the join page.
Destructive-action buttons now use inline confirm/cancel instead of browser popups that fail on mobile.
Used to be you tapped "Cancel Signup" on your phone and nothing happened. Reckon that's fixed now.
Every destructive action on the site — canceling a signup, declining a permit, deleting a trip — used the browser's built-in confirmation popup. That popup silently fails on many mobile browsers, WebViews, and PWA standalone mode. The button would do nothing, with no error message.
All confirmation prompts now render as inline confirm/cancel buttons directly on the page. No browser popup, no platform dependency. You tap the action, the button expands to show "Confirm" and "Cancel" right where you're looking.
This affects every surface with a destructive action:
If you've been managing trips or gear from your phone, some buttons may have appeared broken. They weren't — the browser was swallowing the confirmation dialog. This fix makes every action work reliably regardless of device or browser.
Authorized viewers can expand the trip roster to see everyone signed up by name, not just the headcount.
Used to be you'd squint at the paper signup sheet to figure out who else was fool enough to come. Now it's a button — and it won't let just anybody read it.
The roster section on a trip page used to show only a ring with counts. Now, if you're allowed to see it, you can expand that ring into the full list of who's coming.
Names are only shown to people who have a reason to see them:
Everyone else still sees just the headcount ring — participant names stay private.
The list is assembled on the server and trimmed to name, role, and status before it ever reaches your browser. Contact details and emergency information are never sent to this view.
Recognition is now a social vouching feature — leave a short note on another member's profile to recognize the caving experience you shared.
The "Recognized Member" badge is now a purely social feature. There is no longer a status threshold, no admin-managed recognition, and no permission gate tied to the badge. Recognition is just members vouching for each other — leaving short notes on profiles about their caving experience together.
The only thing gated behind anything on this site is membership ($15/year).
The badge is derived from the number of recognitions a member has received. Each tier earns one more bat. Tiers are computed live — no admin grant, no manual promotion.
| Bats | Threshold |
|---|---|
| 1 bat | 1+ |
| 2 bats | 3+ |
| 3 bats | 8+ |
| 4 bats | 20+ |
| 5 bats | 50+ |
Crossing a tier triggers a notification to the recipient.
Trip and report content is now blocked from AI training crawlers and search-engine indexing, with a honeypot for the bots that ignore robots.txt.
Conservation matters more than your photo album. Glad someone said it out loud.
Specific cave names, locations, and access details are the kind of thing that gets caves trashed when they leak. Now that public AI training crawlers will scrape any unprotected web page for model training data, leaving trip and report pages open meant a cave name mentioned in a report could end up in a chatbot's answer to anyone who asked. That's done.
On the trip, event, report, and calendar pages:
x-robots-tag: noindex, nofollow, noai, noimageai, asking search engines not to index, follow links from, or use the content for AI features./trips from a normal browser, nothing changes.A new route at /cave-database looks like an attractive cave catalog but is entirely fake — fictional caves with plausible-but-wrong coordinates, all hand-written. The route is linked only from places real users won't click (hidden footer text), so any traffic to it is a bot ignoring noindex. Hits are logged with the visiting IP for later review.
Caves are physically fragile, biologically sensitive, and a real conservation problem when crowds find them. Cave locations are guarded for that reason — the National Speleological Society's Cave Conservancy guidelines are explicit about not publishing coordinates. AI training data ends up in models that confidently regurgitate it later. The block draws a clear line: marketing for the grotto stays open, cave content goes through membership.
A persistent in-app nudge for unsigned permits, a nav badge with the count, and a copy-link card for trip leaders.
Used to be you signed the landowner's clipboard with a golf pencil five minutes before the trip. The banner won't let you forget anymore.
If you signed up for a trip that needs a landowner permit, you might forget to actually sign it until the day-of. The system used to email you and call it good. Now it nudges harder as the trip approaches, and gives leaders the tools they need to keep things moving.
A banner above the main page nudges you about unsigned permits. It escalates with the trip date:
Each row shows the trip name and a button to sign. The banner clears as soon as you sign each pending permit.
Whenever you have at least one unsigned permit, a Permits (N) link appears in the top nav with the count. Clicking it takes you to a new page at /member/permits/pending that lists every permit you still need to handle.
After signing up for a permit-required trip, the success page now embeds the permit signature card directly. You can sign on the spot instead of digging through email to find the link.
Trip leaders, accepted co-leaders, and permit-bypass staff (trip managers, moderators, admins) now see Confirm, Bounce, and Decline buttons next to each signup on the manage panel — same audience that could already act on permits, just with a cleaner surface for doing it.
The trip detail page now shows a dedicated Permit link card for anyone who can act on permits. The card has a copy-to-clipboard button and an open-in-new-tab link so leaders can grab the URL without scrolling through a participant's signup view. If the trip needs a permit but no link is configured, the card flags it as a warning instead.
Three buttons where there used to be one. Reckon someone'll figure it out.
A new My Agenda page consolidates trips you're going on, trips you're leading, and event attendance. Editing a trip now opens a dedicated page instead of an inline panel.
Used to keep my trips on a paper clipboard pinned to the dashboard. Page is easier to update.
You had to look in two or three places to see your own caving life — a manage panel for trips you lead, the signups list for trips you joined, and the events page for what you said you'd attend. There's now one page that shows all of it.
A new page at My Agenda (linked from Tools) shows everything you're involved in:
Two filter tabs let you narrow by window (upcoming / past) and scope (going / leading). The Leading filter only shows up if you actually lead anything, so it stays out of the way for everyone else.
Trips on the agenda now wear pills that tell you their state at a glance:
Editing a trip no longer happens in an inline form on the manage panel. Clicking edit on any trip you own opens a dedicated page at /member/trips/[id]/edit with the full redesigned trip form. Public trip detail pages now also show an Edit button for trips you can edit, so you can jump straight from the trip board to editing.
One unified form for every trip — public, private, create, edit — with section navigation, new leader-contact controls, and proper permit handling on personal trips.
Used to be I'd squint at four different trip forms looking for the same field. Down to one now. About time.
If you've ever created or edited a trip on this site, you've used one of four different forms — grotto create, grotto edit, personal create, personal edit — each with its own quirks. That ended. Every trip flow now uses the same form, and you can tell where you are at a glance.
Whether you're starting a new public trip, editing a draft, creating a personal trip with friends, or editing one you already have, you're filling out the same form. Section names and fields are identical across all four flows; only what's relevant for your trip type shows up.
The form is split into sections — Basics, Description, Location, Permit, Approval, Roster, Leaders, and (for grotto trips) Publish Status. The header is sticky and shows your progress as a dot line. Click any dot to jump straight to that section without scrolling.
Personal trips now have the same permit handling as official grotto trips. If your trip needs a permit, you can flag it, set the permit owner, and signups go through the permit-signature flow just like a grotto trip. Previously, permit handling was grotto-only.
The legacy free-text columns (leaderName, leaderContact, permitReference) are gone. Leader identity now comes from the user picker, and permit data comes from the assigned permit record. If you had old free-text values in those fields, they were migrated to the new structured fields before the columns were dropped.
Cleaner data underneath, fewer places for the same name to be spelled three different ways. Won't say I told you so. But I did.
The post-payment page now tells you exactly what state your membership payment is in, with eCheck-specific copy for the slow ones.
Used to be we'd hand the treasurer a fistful of crumpled bills in the parking lot. At least now the slip says what's happening.
If you paid for membership and PayPal sent your payment as an eCheck, your account didn't activate immediately and you had no way to tell why. The signup page just said "thanks." Now the page knows the difference.
The page you land on after PayPal sends you back now reflects the actual state of your payment:
A new page at /admin/paypal-ipn shows the last 100 PayPal events the site has received — every verified payment notification, whether or not it activated a membership. Use it when a member says "I paid but it doesn't show" — the raw event is preserved so you can see exactly what PayPal sent.
Every verified PayPal notification is now stored to a new PayPalIpnLog table, so payment debugging no longer requires grepping the live server logs. The logging is wrapped so a database failure can't block the 200 OK back to PayPal (which would trigger PayPal's 15-retry storm).
Trip leaders and accepted co-leaders now occupy seats against a trip's group cap, so "spots left" reflects everyone actually going.
Back when we ran sign-ups on a paper clipboard, the leader's name was the first one written. We just forgot to count them. Math finally caught up.
Until now, the primary trip leader and any co-leaders sat outside a trip's max participants cap. A trip with a max of 20 and three leaders would still advertise "20 spots left" even though three people in the party were already going. That stops today.
Every trip's group cap now includes the people running the trip:
A trip with a max of 20 and three leaders now reads as 3 / 20 going before any participant has signed up. Seventeen seats remain available for signups.
If you set up a trip months ago expecting leaders not to count, that trip's effective signup capacity is now smaller by however many leaders you have. The system handles this gracefully — nothing breaks — but a few existing trips may now display as full or near-full when they weren't before. If that affects a trip you're running, raise the max in the trip settings.
When an accepted co-leader is removed from a trip, their seat opens up immediately and the next eligible signup on the waitlist gets promoted automatically. Pending invites that get declined don't change anything because pending invites never held a seat.
Capacity math, the registration state on the trips list, the signup endpoint, and the waitlist promoter all subtract leader seats from the same shared count. There is one source of truth for "how many seats are leaders holding," and every screen reads from it.
Rope's only as good as the knot. Same goes for the math behind a trip roster.
Jurisdiction is now derived automatically from the state, and the separate land manager field is gone.
Two small cleanups to the trip create/edit form:
No action needed for existing trips. The form is just shorter.
Submit a private trip for publication and turn it into an official grotto trip. Reviewers can approve, request changes, or reject — and your trip keeps its history through the whole process.
Back in my day we promoted a trip by handing the leader a beer in the parking lot. This is more auditable.
Until now, "personal trips" lived in a separate world from the official grotto trip board. If you wanted a trip you led to count for reports, the path was confusing. That's been rebuilt.
Every private trip you create now has a publication state, shown right on the trip card and in My Trips:
When you're ready, hit Submit for publication on a private trip. Reviewers see it in the admin queue alongside report submissions.
Trip managers, moderators, and admins can:
You'll see the review history on the trip's submission page.
Once a trip is published, edits and cancellations affect more people, so:
This makes it harder for a leader to silently change a trip out from under participants or other staff.
Trip reports now hang off the same canonical trip record — whether it started as a private trip you submitted or was created directly on the public board. There's only one source of truth for "did this trip happen, who led it, what got reported."
The leader of a private trip is locked to whoever created it. You can no longer reassign a private trip leader to someone else — that role is reserved for promoted/published trips and admin tools. This closes a small but real footgun where a private trip could end up "led" by someone who never agreed to lead it.
Won't say I told you so on the auto-notifications. But I did.
This is a substantial schema change: private trips and published trips share a single underlying record with an explicit publication status, instead of being shadow copies of each other. Existing personal trips and submissions were migrated automatically — nothing you've created in the past needs to be redone.
The trip detail page on mobile is tighter, the action bar stays compact, and the header no longer overlaps the sticky controls.
A pass over the mobile trip detail layout to fix several cramped or overlapping spots:
Small stuff matters. A jammed zipper on your pack ruins the whole trip just as fast as a bad anchor.
These are pure layout fixes — no functional changes to how signups or actions work.
New approval modes, signup stage badges, an "I signed the permit" action for members, and admin tools to manage permit owners.
Used to be we'd just leave a note on the landowner's truck and hope for the best. More steps now, but at least nobody falls through the cracks.
Trips that need a landowner permit now have a clearer end-to-end workflow. You'll see exactly where your signup stands at every step, and trip leaders have better tools to move people through the process.
Your spot on a permit-required trip can now be in one of these states, shown as a badge on the trip page and in My Trips:
You'll also get email notifications at each transition, and signup confirmation emails now include the permit owner's name and a link to where you sign.
When you reach the Permit signature required stage, your signup card shows a one-click button to mark the permit as signed. The leader gets notified to verify on their end.
When you create or edit a trip, the old "requires permit verification" checkbox is replaced with two cleaner controls:
The participants page shows each signup's stage and gives you per-row actions: approve an application, confirm a signed permit, or decline with a reason.
You also no longer count as a signup seat on your own trip — the seat count reflects participants only.
Two new things:
Whole lot of stages for what used to be a handshake. Not saying it's wrong.
The data model now uses explicit approval modes and signup stages instead of overloaded boolean flags, which is what made these clearer surfaces possible. Existing trips were migrated automatically; nothing you've done previously needs to be redone.
Browse and search the member directory, view profile pages, and add a bio to your own profile.
We used to just know everybody. Grotto's getting big enough that a directory makes sense — won't say I like it, but I get it.
You can now find other members and see their profiles.
Head to the new Members page (in the navigation menu) to browse the full member list. There's a search bar at the top — type a name and results filter instantly.
Click any member's name — in the directory, on a trip report, or in a signup list — to see their profile. Profiles show:
Go to your profile settings and you'll see a new Bio field. Write a few words about yourself — it shows up on your public profile page.
When you vouch for someone, you can now add an optional note explaining how you know them. Notes are visible on their profile alongside the vouch.
Member profiles are only visible to other members. If you're not a member yet, you won't see the directory or profile pages.
The mobile menu is easier to tap and no longer clips behind other elements.
A handful of fixes to the mobile hamburger menu:
You can now see platform updates on the new Release Notes page, and get notified when major features ship.
Back in my day you found out about changes when someone brought it up at the campfire. At least now it's written down.
We're building a lot of new stuff. Now there's a place to keep up with it.
The Release Notes page shows every update we ship — new features, fixes, and improvements. You'll find a link in the footer.
When something big ships, you'll get a notification. Major features also send an email if you want one. You can turn that on or off from your notifications page.
Sensitive cave locations and trip report details are now protected. Earn trusted status by participating to see more details on trips and reports.
Conservation matters more than convenience. Glad the website finally acts like it.
We care about cave conservation. Some cave locations are sensitive, and sharing them openly can lead to damage or unsafe visits. So we built a trust system.
Trip leaders can now hide cave names on their trips. If they do, anyone who hasn't earned trust yet sees a general label like "Trip in Hamilton County, TN" instead of the real cave name.
Trip reports work the same way. If you're not trusted, photos and videos are blurred and exact cave locations are hidden. You can still see the report text and general area, just not the specifics.
You earn trusted status by participating and getting vouched for by people who know you. There are two ways:
Once you qualify, it happens automatically on your next login.
Trip leaders and staff (trip managers, moderators, admins) are always trusted automatically.
Trust used to mean the old hands knew your face. Two trips and a vouch isn't so different, when you think about it.
You'll get a notification when you earn trusted status.
Non-members signing up for trips now need the trip leader to approve their spot before they're confirmed.
Used to be you sized someone up in the parking lot by whether they brought their own helmet. A confirmation button is less personal, but harder to forget.
If you're not a current member and you sign up for a trip, the trip leader has to confirm your spot first.
Once approved, you'll see full trip details like the meeting location and map link. Until then, you'll only see the county and state.
Nothing changes. Members get confirmed instantly, same as before.
You'll see a new "Pending leader approval" section on your participants page when non-member signups come in. You can approve with one click, or decline with an optional reason that gets sent to the person.
Leaders can also turn on approval for all signups (members included) on a per-trip basis if they want tighter control.