Chambers AppDeveloper documentation

Overview

What the product is, who uses it, and how this documentation is made.

What the product is

Chambers App is a membership and engagement platform for chambers of commerce and similar associations. It replaces the spreadsheets, chat groups and paper forms a chamber runs on: people apply to a committee and are approved, members see their standing, tier and points, events open in waves and are checked in at the door, members keep a company profile and find each other in a directory, business matching suggests introductions, and a daily news digest is put together for each chamber. The first customer is a Chinese chamber's Young Entrepreneurs Committee.

It is one installable web app serving both the member area and the admin area, with a JSON API for a native app later. Sign-in is by a one-time code sent by email. Notices reach people in an in-app inbox, by push and by email.

Who uses it

WhoWhat they doReach
MembersRegister for events, show a member card at the door, keep a profile, browse the directory, ask for introductions, read the news digest.Their own data, and what their chamber's visibility table lets their audience see.
FriendsPeople whose application to a committee is waiting.What the chamber shows Friends.
Exco adminsApprove applications to their committee, run its events and check people in, record positions, award points.Their committee.
Branch adminsThe same across a branch, and its committees.Their branch and everything in it.
Chamber adminsEverything in the chamber: structure, tiers, visibility, brand, digest settings, data requests, moderation.The whole chamber.
Platform operatorSets up chambers and their addresses, appoints the first admins, runs news sources, completes account erasure, watches health.Every chamber, in the web admin only.

See Access for the exact permissions of each admin role.

Two languages

The interface ships in Chinese and English, equal first languages, with every page under its language (/zh/…, /en/…). The privacy notice is always shown in Malay and English. This documentation is written in English only, because it is for developers.

Many chambers, each under its own brand

One engine serves many chambers. The app has no name of its own in front of members: the address a request arrives at decides the chamber, and its name, mark, colour and logo brand every page, the installed app and every email. One person can belong to several chambers under one login.

How this documentation is made

Every fact on these pages is read from the repository when the site is built (pnpm docs:build), so it changes when the code does: the capability reference from the registry and each capability's zod schema, the data model from the migrations applied to SQLite, the API's status codes from its handler, the cron plan from the scheduler and the Worker's configuration, the routes from the route files, and the runbooks from docs/. Tests fail if a capability, a table or an API route is missing, or if anything that must stay private reaches the built site. Today: 180 capabilities (154 on the API), 87 tables, 19 routes.

PageWhat is on it
ArchitectureThe monorepo, the capability executor, access, notices, scheduled work, queues and the platform services.
Data modelEvery table, generated from the migrations.
CapabilitiesEvery capability in the registry: kind, access, input and refusals.
JSON APICalling capabilities over HTTP, and the other routes.
OperationsEnvironments, deploys, migrations, backups and health.
DecisionsThe standing decisions the product is built on.

Glossary

The product's words, from GLOSSARY.md. The code, the interface and these pages use them.

The language of a platform where chambers of commerce and similar associations manage their members, committees and activities.

Language

Chamber: An association hosted on the platform, such as a Chinese chamber of commerce. It is the top-level tenant. Avoid: Organisation, tenant, NGO

Branch: A geographic division of a chamber, such as Kuala Lumpur and Selangor, Johor or Perak. Avoid: State, chapter, subsidiary, region

Committee: A working group within a chamber, at national level or within a branch, such as the Young Entrepreneurs Committee. Avoid: Bureau, group, team

User: A person with a login. One user can be a member of several chambers. Avoid: Account

Friend: A user who has applied to a chamber and is not yet approved. Avoid: Guest, applicant, prospect

Member: A user approved into one chamber. A member belongs to exactly one branch of that chamber, fixed by the first committee that approves them, and to any number of committees in that branch or at national level. Membership belongs to the person, not to a company. Avoid: Customer, contact

Company: A business a member lists on their profile. A member can list more than one. Avoid: Organisation, firm

Position: An office a member holds in one committee for a dated term, such as chairman or secretary. A member can hold several positions at once, including at national and branch level. Avoid: Role, title, post

Office-holder: A member who currently holds a position in a committee. Avoid: Committee member

Exco: The office-holders of one committee as a group. A national committee's Exco is its central Exco. Avoid: Board, council

Exco admin: The office-holder in an Exco who is authorised to approve applications to that committee and to administer it. Avoid: Committee admin, approver

Tier: A member's standing within a chamber, held once per chamber and raised by earning points. Each chamber defines its own tiers; a new member starts at the lowest. Avoid: Level, rank, grade

Chamber admin: A person authorised to administer a whole chamber, including every branch and committee in it. Avoid: National admin, super admin

Branch admin: A person authorised to administer one branch and the committees in it. Avoid: State admin

Platform operator: The party running the platform, which creates chambers and appoints each one's first chamber admin. Avoid: Super admin, system admin

Points: Credit a member earns in a chamber for attending or helping run events, referring new members, or contributions an admin records. Points are never deleted; a correction is a new entry. Avoid: Stars, credits, score

Event: Something with a date that people register for and attend, organised by a committee, a branch or the chamber. Attending an event earns points. Avoid: Activity, program, function

Reach: How widely an event is offered: the organising committee only, its whole branch, or the whole chamber. Avoid: Scope, audience

Wave: One step in an event's release: an audience and the time registration opens to it. Waves run from the organising Exco through the tiers, highest first, then Friends, then the public. Avoid: Phase, round, stage

Reminder: The notice sent about a day before an event to everyone holding a place at it, once per registration. Avoid: Alert, nudge

Opening notice: The notice that registration for an event has opened to a person, sent once when their wave opens. In the inbox unless they turn it off; by push and email only if they turn those on. Avoid: Invitation, wave alert

Event staff: People the publisher names to check attendees in and upload photos for one event. Avoid: Crew, helpers, ushers

Showcase: The public display of photos from past events that a publisher has chosen to share. Avoid: Portfolio, public gallery

Introduction: A member's request to meet another member of the same chamber, with a short note, which the other accepts or declines within 14 days. Once accepted, each sees the other's contact details. A declined member waits 90 days before asking the same person again. Avoid: Connection, referral, match request

Introduction outcome: What each person in an accepted introduction says came of it (nothing, in talks, or a deal done), asked once 30 days after acceptance and changeable for 60 days after that. Admins see only totals by month and branch. Avoid: Conversion, result, feedback