All documents
Specification

SmartCommunity

What it answers, what it refuses, and how one association is never answered from another's rules. Written to be read by somebody who will not read the code.

Document
SRS-SC-1
Version
1.0
Date
31 August 2026
Status
For review
Author
Abad Naseer

1Purpose and scope

SmartCommunity answers a resident's questions about the place they live, out of that association's own documents, and names the document and the section every answer came from. It does nothing else. It does not book a tradesperson, take a payment, or issue a parking pass, and the reason it does not is the subject of section 8.

It began as a floating panel inside the Service Assistant. It is now its own application, on its own machine, with its own database and its own address, and this document specifies it as that. Section 6 says what is still shared and what is not.

The qualities this system is judged on are grounding, scoping, fallback, latency, security and observability. Grounding and scoping come first, and that ordering is deliberate: an assistant that answers a rules question wrongly is worse than one that declines, because a resident will act on it.

2The system in one picture

One path, with one place where it can branch. Retrieval happens before any engine is called, and it is scoped to one association before it ranks anything. If nothing in that association's documents clears the threshold, no engine is called at all: there is nothing for it to ground an answer in, and asking it anyway is asking it to invent.

A resident, typing or aloud Which association? Retrieval, that shelf only Passages found score ≥ 0.30 Nothing found no engine called An engine words only those passages “It is not in your documents”

Fig. 1 · a question, and the only two things that can happen to it

The refusal path is not an error path. It is the second of the two correct outcomes, and it is drawn differently on screen from an answer because the difference is real.

3Who uses it

WhoWhat they come forSigned in?
A resident One question about a rule, a fee, a date, or a form. Usually once, usually on a phone, usually not in the mood to read a 90 page PDF. No
A resident with an account The same, with their association remembered across visits. Yes
The management office Adding a document, replacing one, seeing what each association currently holds, and choosing which engine words the answers. Admin token

There is no provider role and no office staff role beyond the admin token. Both exist on the Service Assistant and neither was carried across, because neither has anything to do with reading a rule.

4What it does

Asking

  • F-1Accept a question in ordinary language, typed or spoken, and answer it from the asking resident's association's documents.
  • F-2Name the document and the section behind every answer, and offer both ways into it: opening it to read, and saving it.
  • F-3Where the documents contradict each other, say so and quote both, rather than silently picking one. The quiet hours question does this today: Rule 2 and Rule 18 disagree, and the answer says they disagree.
  • F-4Where nothing in the documents covers the question, say so, name what the documents do cover, and call no engine.
  • F-5Ask which association the resident belongs to when it is not known, remember the answer across visits, and let it be changed in one tap from beside any answer.

Asking out loud

  • F-6Hold a spoken conversation: listen, answer aloud, and listen again until it is stopped. One microphone permission for the whole conversation, not one per question.
  • F-7Show what was heard as the resident's own turn. A misheard question is a common failure and otherwise an invisible one.
  • F-8Speak the short form of an answer, not the long one. A list of seven documents is useful to read and unbearable to hear.
  • F-9Where speech synthesis is unavailable, fall back to the browser's own voice rather than answering a spoken question in silence.

Documents

  • F-10List everything the resident's association holds, alongside the conversation rather than behind a second navigation.
  • F-11Serve any document two ways: inline, for checking one line, and as a download, for a form somebody has to fill in.
  • F-12Say on the card when a document cannot be quoted from. Several are scans with no readable text, and somebody who saves a site map and then asks a question about it should not learn this from a refusal.

The office

  • F-13Upload a document against an association, and have it answerable without a restart.
  • F-14Report what each association currently holds and how much of it is indexed.
  • F-15Choose which engine words the answers. It reports the hardware's state and never changes it: starting and stopping the GPU belongs to exactly one panel, and it is not this one.

5How it must behave

5.1Grounding and refusal

Every sentence of every answer is required to come from a passage that retrieval returned. The engine is given those passages and told to use nothing else; it is never asked what it knows.

RequirementValueMeasured or target
Retrieval threshold0.30 cosineMeasured, in the code
Below thresholdNo engine call at allMeasured
Answer without a citation0Required

The threshold is doing real work rather than decorating. An unanswerable question costs nothing and reveals nothing, because the question never leaves the machine.

5.2Community scoping

Scoping is applied before ranking, not after. The candidate set is narrowed to one association's passages and the search runs over that slice, so a passage belonging to a neighbouring association cannot place first and then be filtered out: it is never a candidate.

FactValue
Associations6
Documents20
Indexed passages209
Embedding modelall-MiniLM-L6-v2, 384 dimensions

The associations are not evenly stocked, and the specification has to admit it: Serenity Point has 98 passages and Lauderdale Lakes 92, while Kendall Square, Valencia and Enclave at Old Cutler have one each. Those three can be searched and can be downloaded from, and a rules question asked against them will usually and correctly be refused. That is a content gap, not a defect, and it closes by uploading documents.

Where an answer does come from another association, because a resident asked for it deliberately, the citation strip says so in the resident's own words. It must not say so when it is not true: comparing an internal key against a printed label made that warning fire on a resident's own association, which is a warning that gets believed. It now compares like with like.

5.3Fallback

Two engines can word an answer: Gemini, and an open model on hardware we control. The switch chooses which is tried. Whichever answers, the passages it was given are the same, so the answer is grounded either way and the citations do not move.

  • N-1When the chosen engine does not answer, the other one answers, within the same request. The resident is not shown an error and is not asked to try again.
  • N-2The panel reports which engine actually answered, and says when that was not the one selected, and why.
  • N-3Retrieval never falls back to anything. If the documents do not cover it, both engines are equally not asked.

This is the property that was proved end to end on 30 August 2026, against a real model in the client's own AWS account: with the switch set to the open model and the machine stopped, a resident's question was answered correctly in 1.6 seconds by Gemini, and the panel reported the fallback and named the reason.

5.4Latency and scale

StageTimeNote
RetrievalSingle digit ms209 vectors held in memory, one matrix multiply
RefusalRetrieval onlyNo engine is called, so no network hop
Answer, Gemini1 to 3 sMeasured
Answer, open model on a CPU70 sMeasured, and the reason the timeout exists
Engine timeout45 sThen the other engine answers

The honest conformance note: this runs as one process on a machine with under 2GB of memory, and the embedding model is most of that. It is sized for one association's residents, not for a portfolio of them. The index is small enough that retrieval is not the constraint and will not become one at this scale; memory is the constraint, and the first thing that fixes it is a bigger machine rather than a change to this design.

5.5Security

  • N-4A resident's association scopes retrieval on the server. It is never taken from anything the browser could edit into a different answer.
  • N-5Office functions require an admin token. Without one, every one of them returns 401 rather than a partial answer.
  • N-6No question and no document leaves the machine unless an engine is called, and an engine is only called with the passages retrieval already selected.
  • N-7Where the open model is used, the port it listens on is reachable only from the three application addresses. It has no authentication of its own, so the network boundary is the whole of its protection and is treated that way.

5.6Observability

  • N-8Every question is logged with the association it was scoped to and the time it took, so a slow answer can be attributed to a stage.
  • N-9The panel reports the index: how many passages, how many documents, per association. A document that was uploaded but not indexed is visible as a number rather than as a refusal in front of a resident.
  • N-10The panel reports what answered the last question, separately from what is switched on. Those are two different facts and conflating them hides every fallback.

6Where it runs

PartWhat
Addresslivz.smartzees.com
ApplicationFastAPI on port 8200, one process
ScreensNext.js, exported as static files and served by nginx
DatabaseIts own MySQL schema, on its own machine
Index209 passages, held in memory, rebuilt on upload
EnginesGemini, or the open model over the network

Port 8200 rather than 8100 is deliberate. This machine was cloned from the Service Assistant's, and a stray request meant for that product must not find something listening here and be answered by it.

What is shared with the other two agents: the engine switch setting, and the hardware behind it. What is not shared: the database, the accounts, the sessions, the documents, the index, the process and the address. An outage of either of the other two agents does not reach this one.

One item is outstanding at the time of writing. Port 443 is not yet open in this machine's firewall, so the site is served over http. Two consequences follow and both are visible: the address bar says the connection is not private, and browsers will not hand out a microphone outside a secure context, so the spoken conversation cannot start. Both clear the moment the port is opened. Nothing in the application needs to change.

7Assumptions and limits

  • A-1The documents are the authority. Where they are wrong, out of date or silent, the answers are wrong, out of date or absent, and no amount of engine quality changes that.
  • A-2A scanned document with no readable text can be downloaded and cannot be quoted. The screen says which is which.
  • A-3English only. The retrieval model is an English model, and a question in another language will usually and correctly be refused rather than answered badly.
  • A-4One association per resident at a time. Asking as a different one is deliberate, one tap, and visibly labelled.
  • A-5Speech is best effort in both directions. A failed transcription asks the resident to repeat themselves and a failed voice hands the reply to the browser; neither takes the written answer away.

8Out of scope

Named rather than left to be assumed, because every one of these exists on a sibling product and could reasonably be expected here.

Not hereWhere it isWhy not here
Booking a tradespersonSmartServiceA different job, a different diary, and a different set of people to pay
PaymentsSmartService, SmartMarketNothing here costs money
Parking passesSmartServiceKept with the product that already issues them, by decision, so one gate has one source of truth
Provider accountsSmartServiceNo tradesperson has a reason to sign in here
Starting and stopping the GPUSmartServiceTwo panels able to stop one card is a way to stop it mid answer
Legal adviceNowhereIt quotes the documents and names the section. Deciding what that means for a dispute is a person's job

Written by Abad Naseer. Every measured number in this document is cited from the running system or from the code, and every target says that it is a target. Where the two disagree, the document says so rather than choosing the flattering one.