Selected Work
Not-for-profit · Community platform for Kauaʻi

MatchBook

Find something worth showing up for.

MatchBook brings Kauaʻi’s events and community groups into one place. People can browse by interest or date, save possibilities, join groups, and see them in a personal agenda. I’m building this free, not-for-profit project to help people find something they would like to make room for in their week.

Made for Kauaʻi

A community project for Kauaʻi residents and visitors, built around what is happening here.

Free to use

A free place to explore events and groups, with no subscription required.

An invitation

A familiar interest, a new place, or a reason to try something you have been meaning to do.

MatchBook landing page: 'Find something worth showing up for', an interest and time search bar, and three nearby event cards Development build · Kauaʻi event listings

Start with an interest and the time you have available. The screenshots show the development build and its working dataset.

01 · The starting point

Bring scattered announcements into one place.

An event can be open to everyone and still be easy to miss. A library posts on one page, a community group keeps a separate calendar, and a flyer disappears into a social feed. Finding something to do means knowing which sources to check and remembering what each announced.

Kauaʻi already has people organizing, teaching, performing, and bringing others together. MatchBook’s job is to make more of that work visible to someone who might be glad to find it.

A listing also needs enough context to help someone choose. Topic and date filters narrow the possibilities. Event details explain the time, place, cost, and any registration instructions available from the source. Saving and the agenda give a person room to consider a plan.

The question

What would make someone pause and think, “I’d like to go to that”?

01

Choose a starting point.

Topics and dates help someone begin with a familiar interest or the time they have available.

02

Room for a maybe.

Saving an event keeps it within reach while someone checks the date, asks a friend, or decides how to spend the weekend.

03

Enough information to decide.

Time, place, cost, and registration details stay close to the invitation wherever the source provides them.

02 · Browsing & planning

Browse, save, and make room in the week.

Saving an event keeps it in the agenda for later consideration. Joining a group in MatchBook brings in its events and recurring meetings. Organizer registration remains a separate step.

  1. 01Choose a starting pointSelect a topic or a date to narrow the possibilities.
  2. 02Browse the listingsExplore the poster grid or consider one card at a time.
  3. 03Check the detailsRead the time, place, cost, and available registration instructions.
  4. 04Save or joinSave an event for later or join a group in MatchBook.
  5. 05Review the agendaSee saved events and joined-group activities together.
  6. 06Make the planFollow the organizer’s instructions for registration or attendance.
03 · Product views

Browse by interest, date, or one card at a time.

Discover and Match offer different ways to explore the same listings. The calendar shows what is available by date; the agenda brings together the events and groups a person has chosen to keep. Select a screenshot to view it at full size.

Discover page with interest category cards and event listings
Discover Browse a poster grid of listings, using topic and time filters to give an open-ended search some direction.
Match view showing one event card with undo, pass, and save controls
Match Read one event at a time, then pass, save, or undo a choice. Saving records interest while the person decides whether to go.
MatchBook calendar of available Kauaʻi event listings, with topic filters and month, week, and day views
Calendar Browse available events by date and topic, with month, week, and day views.
Agenda combining saved events, joined-group events, and recurring group meetings on one calendar
Agenda See saved events, events from joined groups, and recurring group meetings on one calendar.
Profile page with coming-up events, group memberships, and friends
Profile Return to upcoming events, group memberships, interests, and friends connected to the account.
Customize page with profile fields and interest topic pickers
Customize Choose and change profile details and interests, giving discovery a starting point the person controls.
04 · The brand

A little spark belongs here.

A drawn wordmark and topic illustrations give the product its warmth. Repeated visual cues help someone recognize a subject and find their way through the interface.

Illustration of a match at the moment of striking

I liked the matchbook as a small, familiar thing associated with starting something. It gave the product a visual language of its own: a drawn wordmark, loose matches, and illustrations that make the pages feel like somewhere worth looking around.

A book, a musical instrument, or a bag of groceries can suggest what kind of event a card holds before someone reads every word. The same motifs recur across browsing and planning, helping people recognize topics as they move between views.

I wanted the warmth of a community noticeboard, with enough order to find what you came for.

Music
Food
Outdoors
Community
Books
Making
05 · Architecture & record continuity

Keep saved events connected as listings change.

Saving a listing is a small investment of attention. If its time, description, or cost changes, that saved reference should still lead to the same event. Stable identities let the directory refresh its information while preserving the person’s connection to it.

Continuity

Preserve the saved connection.

Directory sync identifies each listing by its source ID and updates the existing record. Saved-event and membership references continue to point to the same database identity.

Freshness

Remove details the source has withdrawn.

A refresh can clear fields such as cost or registration notes when the published register no longer supplies them. An old price should not linger simply because it was once filled in.

Reactivity

Carry updates across views.

React provides the interface, while Meteor subscriptions keep views connected to MongoDB records. Server methods validate user actions and check the permissions required to perform them.

Participation

Let people contribute listings.

Signed-in users can create events and groups, with a poster preview as they write. Editing existing listings and administrative review remain with admins in the current build.

06 · Source quality & recommendations

Keep listings current and recommendations useful.

Two parts of the newer development build support that goal: a source intake workflow with human approval before publication, and a recommendation service shared by Discover and Match.

Source intake & curator review · implemented in development

Keep the source and review the change.

Someone may plan an afternoon around a listing. A changed meeting time or missing registration detail needs to remain visible to the person preparing it for publication.

I built a separate TypeScript service that retains source material, extracts permitted fields, and creates internal candidates for review. An admin can inspect the proposed listing, resolve duplicate or classification questions, and approve the exact revision that will be published.

Repeated imports reuse unchanged source records. Material changes return candidates to review, and parser versions remain part of the processing history. The publication workflow retains its approval decision and can recover an interrupted attempt.

The publication boundary

An imported candidate reaches the public directory only after its current revision and approval decision have been recorded.

  1. Read an approved source

    Source settings control whether collection is permitted and enabled. Approved manual snapshots provide another route into the intake service.

  2. Retain and prepare the information

    Preserve source content and evidence, extract fields into a consistent format, and create a review candidate. Content hashes identify repeated material.

  3. Review the exact revision

    An admin checks the proposed fields, possible duplicates, and classification. The approval is bound to the revision reviewed.

  4. Publish the approved change

    The curator workflow checks the saved approval before updating the public listing. Failed attempts retain a status that supports recovery.

Shared ranking service · implemented in development

Useful suggestions, even for a new user.

Interests make a useful starting point. They can also become a narrow one if the product keeps returning the same kind of thing. I want someone who comes looking for music to have room to notice a workshop, a volunteer morning, or a group they had not thought to search for.

A newcomer receives a baseline order of eligible listings. Selecting interests or joining groups gives the ranking service more context. Each optional scoring component contributes only when the required information exists, and the weights are recalculated across the available components.

Discover’s poster grid and Match’s swipe deck use the same server service. If adaptive ranking fails, the server can return the baseline; if the service is unavailable, the views retain their simpler local ordering.

  1. 01
    Check eligibility first

    Exclude events marked canceled, private, unlisted, sold out, or unpublished, along with events that are past or have no usable date. Pass and undo decisions also affect the default selection.

  2. 02
    Start with a usable baseline

    Rank eligible listings by time proximity, record completeness, and freshness, with a stable tie-breaker. An empty profile still has a starting order.

  3. 03
    Add the signals available

    Topic overlap, stated preferences, group memberships, and relevant direct connections can contribute to the score. Missing inputs leave a component out of the calculation.

  4. 04
    Make room for variety

    A final pass spreads attention across hosts and topics, moving repeated hosts or topics further down the results when other eligible options are available.

The ranker runs inside the existing Meteor server and uses MongoDB records for its recommendation inputs and history.

Interaction history

Preserve actions through retries.

Actions are appended to a history, while separate records hold the current state used by the interface. Repeating a request with the same user and client event identifier returns the existing action. Tracking failures leave saves and group actions available.

What was actually shown

Count visibility before interpreting a response.

The feed records an impression after at least half a card is visible for one second. Match records only the active top card. Saving can still mean “maybe”; clearer RSVP and attendance signals are needed before those outcomes support model evaluation.

07 · What I’m working toward

The best part happens after the screen.

Building MatchBook has brought me back to how much can sit between an invitation and a decision. A person may need the right date, a little more information, or simply a way to remember something that caught their attention.

I want the product to be considerate of those small hesitations. It should help someone find their way to what is already happening around them, with enough information to feel comfortable taking the next step.

That is the experience I’m working toward: someone finds something they would otherwise have missed, makes room for it, and has a reason to go.