All work

Joyn

One home for a whole community: chat, events, polls, boards and files, and who's around right now.

Visit getjoyn.io

Free for up to 100 members

What I did
Everything: product, design, web, iOS and Android, the API and the realtime gateway
Runs on
The web, iPhone, iPad and Android, in English and Danish
For
Sports clubs, churches, associations, schools, choirs and volunteer groups
Joyn on an iPad: Harbour Run Club's home with its events, files, people, channels and groups, surrounded by the Saturday Long Run event, a chat message about it, a poll, a board card and the member count.

Made for the people who keep a club going.

Most of them run on a group chat, a shared drive, a Facebook event and a mailing list. Joyn puts the whole community in one space, gives every crew inside it a group of its own, and speaks Danish as well as English.

Sports clubsChurchesAssociationsSchools and classesChoirs and bandsVolunteer groups

Take a walk through a space.

#channels

Channels for every topic

A channel can be a conversation, announcements, a to-do list, a weekly check-in or a kanban board. Conversations have reactions, mentions, GIFs, polls and questions, and you can see who's typing and who's online.

Reactions@mentionsGIFsTypingPresence
A Joyn chat message from Anna Holm asking who's in for Saturday's long run, with reactions.
#events

Events people actually show up to

RSVP in one tap, with a waitlist when it's full, recurring events, reminders and co-organisers. Public events let guests sign up with just a name and an email, and everything exports to your own calendar.

RSVPWaitlistRecurringRemindersCalendar export
The Saturday Long Run event card in Joyn: 08:00 to 10:30 at the Little Mermaid, 27 going and 3 spots left, with Going and Not going buttons.
#polls

Polls that end the back-and-forth

Ask the whole club in a channel or under an event, watch the votes come in, and close it when it's decided.

In channelsIn eventsCloses on time
A Joyn poll asking which Sunday works, with Sunday 15 November ahead at 58 percent.
#boards

Boards, to-dos and check-ins

Kanban boards with a comment thread on every card, to-do lists, and check-ins that ask the same question on a schedule, so the committee's work lives next to the conversation about it.

KanbanCard commentsTo-dosCheck-ins
A Joyn board column, In progress, with a card for the route map and GPX file due 11 October.
#files

Files and pages

Folders for the club's files, and pages the committee writes together, live, like a shared document that lives inside the space.

FoldersShared filesLive co-editing
Joyn files: a Harbour 10K folder, a route map PDF and the club handbook page.
#groups

Groups and roles

Every crew gets a group inside the space, public or private, with its own channels, events, files and admins. Custom roles and per-channel permissions decide who can do what.

Public or private groupsCustom rolesManage channelsManage eventsManage roles
#public-page

A front door for new people

Every space can have a public page with its upcoming events, news and a join button, and it never shows members' names.

Upcoming eventsNewsJoin button
getjoyn.io/c/harbour-run-club

Realtime, all the way down.

A community app lives or dies on feeling alive. Messages, reactions, typing and who's online travel through a WebSocket gateway of its own, separate from the API.

Who's online works the same way. However many parts of a screen care about a topic, the app subscribes to it once, and presence requests go out in batches of 50.

  1. 1
    Sofie hits send
    Her app shows the message straight away and tags it with a one-time nonce.
  2. 2
    The API saves it
    Fastify writes it to Postgres and works out which members should hear about it.
  3. 3
    Redis carries it
    It is published on Redis, addressed to each gateway machine those members are connected to.
  4. 4
    The gateway delivers it
    Every gateway pushes it down its open WebSockets, and each phone and browser in the channel shows it.
  5. 5
    Sofie's copy comes back too
    The nonce tells her app it already has this one, so it never shows up twice.

And the rest of it

Pages written together
Committee documents with live co-editing, on BlockNote, Yjs and a Hocuspocus server of its own.
Fast first paint
Pages are fetched on the server and handed to React Query, so lists are there before the JavaScript is.
It feels instant
Reactions, RSVPs and moves on a board change on screen before the server has answered.
Works on the bus
The phone app keeps its data on the device and retries with backoff when the signal drops. A message that fails can be sent again.
Nobody misses anything
Push notifications through Firebase, and weekly digests and unread-message emails sent by BullMQ jobs.
Pictures that load nicely
Uploads go to Cloudflare R2, resized with sharp, with a blurhash to show while they arrive.
Bugs fixed overnight
A card on Joyn's own kanban board can be picked up by Claude Code at night and come back as a draft pull request.
Built with
TypeScriptNext.jsReact Native and ExpoFastifyPostgresRedis and WebSocketsBullMQYjs and HocuspocusFirebaseStripeSanityCloudflare R2Fly.io

Bring your club
under one roof.

Joyn is free for up to 100 members. After that it's €4 a person a month, or €250 a month for a community of any size.

Oscar
Odense, Denmark ·Available now

Got an idea?
Tell me about it.

Big, small, half-baked or a bit weird, I'd love to hear it. One sentence is plenty to start.

Or just email hello@osukacreative.com