Overview
The RBA system uses two completely separate Firebase Realtime Database projects. They share no data and operate independently. Each uses the compat SDK (v9.23.0) via CDN script tags — never Firestore, never npm/ESM imports.
rba-mgr
https://rba-mgr-default-rtdb.firebaseio.com
rba-dev-team-portal
https://rba-dev-team-portal-default-rtdb.firebaseio.com
Type Legend
String · Boolean · Number · Object · Array · Auto-assigned
Project 1 — RBAMGR Case Management
rba-mgrTop-Level Structure
rba-mgr-default-rtdb/
├── arbitrators/
│ └── [arbitratorId]/ ← string key, arbitrator's unique ID
│ ├── profile/
│ ├── settings/
│ └── cases/
├── counters/
│ └── [arbitratorId]/
│ └── [year] ← e.g., "2026": 17
└── resources/
└── [arbitratorId]/
└── [resourceId]/
arbitrators / [id] / profile
name
email
phone
arbitrators / [id] / settings / fieldToggles
One boolean per toggleable intake field. Read by C3 Case Intake Form on load — hidden fields are suppressed and not saved to the case record.
cadArbNumber
notificationDate
acceptanceDate
arbOrderReceived
ownershipType
appealValueType
appealReasons
taxAgentFields
arbitrators / [id] / cases / [caseId]
Case ID format: case_[timestamp]_[random]
— generated at intake. Never changes once created.
meta/
fileNumber
arbitrationNumber
appraisalDistrictArbNumber
status
statusHistory
createdAt
lastModified
property/
taxAccountNumber
address
county
taxYear
ownershipType
propertyType
residenceHomestead
appealValueType
parties/
propertyOwner
taxAgent
taxDistrict
assistants
financials/
depositAmount
arbitratorFee
partyResponsibleForFee
refundRecipientPayment
amountReceivable
paymentReceivedFrom
paymentReceivedDate
counters / [arbitratorId] / [year]
A single integer per year, incremented atomically on each case save to generate the next File Number. Seeded at 0 manually before first use.
counters/
└── arb_abc123/
├── 2026: 17 ← next case will be 2026-018
└── 2025: 43
resources / [arbitratorId] / [resourceId]
title
body
category
Project 2 — Dev Team Portal
rba-dev-team-portalTop-Level Structure
rba-dev-team-portal-default-rtdb/
├── volunteers/
│ └── [uid]/ ← Firebase Auth UID (auto-assigned on first login)
│ ├── profile/
│ ├── tier/
│ ├── compensation/
│ └── submissions/
├── assignments/
│ └── [assignmentId]/ ← key: "assign_" + timestamp
└── admin/
└── invites/
└── [inviteCode]/ ← key: random 8-char code
volunteers / [uid] / profile
name
email
joinedAt
invitedBy
volunteers / [uid] / tier
level
assignedAt
assignedBy
volunteers / [uid] / compensation
type
couponCode
lifetimeFree
notes
volunteers / [uid] / submissions / [submissionId]
type
component
severity
content
submittedAt
assignments / [assignmentId]
title
description
component
assignedTo
dueDate
status
createdAt
admin / invites / [inviteCode]
email
tier
createdAt
used
Node Relationships
In the Portal project, assignments[].assignedTo
contains volunteer UIDs. When a volunteer loads their assignments page, the system reads all assignments where assignedTo
includes their UID. When they submit feedback or a bug report, it writes to volunteers/[uid]/submissions/
. Security rules ensure volunteers can only write to their own node.
