Skip to main content

Combining profiles and your own accounts

· 8 min read
Dave Rapin
Dave Rapin
Founder @ Curling IO

If your profile is managed in someone else's account, select Request this profile in Account > Participants when that action appears. Your club reviews the request. It can move the profile to your account, ask its current owner to share a code with you, or reject the request.

Only combine accounts that belong to you. If your account has two participant profiles for the same person, you can compare their details and combine them to bring that person's registrations and history together.

Let people try curling without committing their winter

· 7 min read

Give new curlers a way to sign up for a few weeks. Someone who enjoyed a first visit may be ready to come back next Thursday without knowing whether they can commit through March.

The third podcast episode in Curling Canada's The Future of Canadian Curling series discusses shorter commitments for new curlers. A four-week learn-to-curl program gives beginners time to learn the basics and play a few games before deciding whether to join a longer league.

Payment plans and installments

· 4 min read

This post is part of our Curling IO v3 sneak peek series, where we explore some of the new features available in the upcoming version.

A member wants to spread their season fee over a few months. Collecting those payments by e-transfer and tracking them in a spreadsheet can be challenging.

Payment plans let you split selected purchases into scheduled installments. Members choose a plan at checkout, SportsPay schedules the later installments for automatic collection, and every payment stays connected to the member's order in Curling IO.

Update your club website with Website Studio

· 10 min read

This post is part of our Curling IO v3 sneak peek series, where we explore some of the new features available in the upcoming version.

If your club uses a content management system (CMS), this might sound familiar. A staff member or volunteer sets up the website, but when they leave, no one else knows how to update it. Updates get put off, and old information stays online.

We built Website Studio to make it as easy as possible for club staff to keep their website up to date. Your website lives in Curling IO alongside your club’s programs, events, and registration. You don’t need to manage a complicated third-party website, like WordPress, or pay another provider just for website hosting.

Why We Chose Rust for Version 3

· 12 min read
Dave Rapin
Dave Rapin
Founder @ Curling IO
About this post

This is a technical architecture post from the development of Curling IO v3. It is written for software engineers and goes deeper into Gleam, Rust, SQLite, client-side UI architecture, and build tooling than our usual product posts.

For Curling IO v3, we knew we wanted to move away from the Ruby on Rails stack we'd used for v2. We wanted a statically typed language with stronger compile-time guarantees and fewer footguns. We first explored Gleam because it ticked those boxes and gave us access to the BEAM. Lustre offered a typed UI framework for both server and client. An initial implementation let us see how that combination would fit our architecture. Our early foundation posts describe what we were learning and building.

That work helped settle the product requirements, the changes we wanted from Version 2, and the UI design. It also exposed tradeoffs in deployment and client interactions that led us to ultimately choose Rust and TypeScript as the best fit for our architecture before going further with Gleam and Lustre. SQLite and the product design carried forward. We’ve since ported and expanded our SQL tooling and built a small TypeScript runtime called Hypertea for client interactions.

The move improved deployment, gave us useful compile-time automation, and suited the way we investigate and fix issues. Unfortunately, it also made our builds much heavier. There are things about Gleam and Lustre that we still prefer.

Human in the Loop with Contracts

· 14 min read
Dave Rapin
Dave Rapin
Founder @ Curling IO
About this post

This is a technical implementation note about the AI assistant architecture in Curling IO v3. It is written for software engineers and others designing agent systems, and goes deeper into Rust, persistence, authorization, and failure handling than our usual product posts.

The usual human-in-the-loop AI agent pattern goes something like this: the model requests a tool call, the agent runtime pauses, a human approves the call, and the runtime resumes so the tool can execute.

That is a reasonable general-purpose design. It is also stricter than simply letting an agent call every tool it can see. For Curling IO, we wanted to expose the smallest possible surface to the model and put an application-owned guardrail around every path to a write. That led us to a stricter question:

If the application already has the exact call details, why hand control back to the agent at all?

By the time we ask a club manager to approve an operation, Curling IO has parsed the model's request, resolved every default, checked the current application state, produced a fixed preview, and stored the exact arguments. The model has nothing useful left to contribute to execution, so we do not let it execute the operation or resume it merely to carry out the approval.

The agent proposes. The application turns that proposal into a contract. The human approves the contract. Rust executes it.

In-app Assistance in Curling IO

· 8 min read
Dave Rapin
Dave Rapin
Founder @ Curling IO

This post is part of our Curling IO v3 sneak peek series, where we explore some of the new features available in the upcoming version.

Curling IO v3 includes optional in-app assistance for most tasks a club manager does. It appears within the section where the work is happening and uses the context needed for that work.

An assistant can investigate a problem, explain what it finds, and prepare an operation for review. It performs that operation only after an administrator explicitly approves it.

Send Curling IO Purchases to Zapier or n8n

· 5 min read
Dave Rapin
Dave Rapin
Founder @ Curling IO

This post is part of our Curling IO v3 sneak peek series, where we explore some of the new features available in the upcoming version.

Clubs often need to send purchase information to systems outside Curling IO. That might mean updating a spreadsheet, notifying staff, or starting a workflow in another service.

Rentals are one example. Someone may need to prepare the lounge, reserve tables, arrange catering, or add the booking to a staff spreadsheet.

Curling IO v3 webhooks can send that product purchase to Zapier, n8n, or another HTTPS endpoint when it is submitted, paid, cancelled, or rescheduled.

Optimizing Curling Draw Schedules

· 26 min read
Dave Rapin
Dave Rapin
Founder @ Curling IO

This post is part of our Curling IO v3 sneak peek series, where we explore some of the new features available in the upcoming version.

Curling IO v3 includes a new draw scheduling screen for event games. The schedule is a grid of draws and club resources, with unassigned games kept in a queue beside it. You can drag and drop games, lock specific placements, and use Allocate and Optimize around those locks.

Unlike a separate schedule template generator, this editor works with the event's actual teams, stages, games, resources, and draw times. Saving the schedule updates the event directly.

You can try most of the scheduling interface now at CurlingSchedules.com. It uses generic teams and browser-local saves instead of an event's actual games, but the grid, drag-and-drop editing, locks, catalog schedules, fairness inspection, and optimization are available today.