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
| Who | What they do | Reach |
|---|---|---|
| Members | Register 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. |
| Friends | People whose application to a committee is waiting. | What the chamber shows Friends. |
| Exco admins | Approve applications to their committee, run its events and check people in, record positions, award points. | Their committee. |
| Branch admins | The same across a branch, and its committees. | Their branch and everything in it. |
| Chamber admins | Everything in the chamber: structure, tiers, visibility, brand, digest settings, data requests, moderation. | The whole chamber. |
| Platform operator | Sets 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.
| Page | What is on it |
|---|---|
| Architecture | The monorepo, the capability executor, access, notices, scheduled work, queues and the platform services. |
| Data model | Every table, generated from the migrations. |
| Capabilities | Every capability in the registry: kind, access, input and refusals. |
| JSON API | Calling capabilities over HTTP, and the other routes. |
| Operations | Environments, deploys, migrations, backups and health. |
| Decisions | The 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