[feature][admin-v2] Applicant blacklist scan#114
Conversation
|
Checks seem to be failing benignly. Some naming normalization bug within the check itself. |
| ? "bg-theme/10 hover:bg-theme/15 active:bg-theme/15" | ||
| : "hover:bg-theme/5 active:bg-theme/15", | ||
| "h-full w-full flex-row justify-between gap-0 rounded-none", | ||
| disabled |
There was a problem hiding this comment.
It might be slightly confusing for others seeing just a greyed-out row. Could you add a 'blacklist' chip to these entries as well so its clear?
eg. next to Applicant X label
|
@jasperjjhe looks great overall - love the clean design 🐐. Could you try running the biome scripts locally again (lint, format) because I'm seeing a few unordered CSS class and import warnings. To address your questions in the ticket:
Once this is merged, you can proceed with mirroring the dev firestore setup in prod. Please add the rule for admin-only reads and writes! |
…pplicants - add blacklist models and service for Firestore subscription + case-insensitive email matching - render a collapsible Blacklisted section in Applicant List with count, details, and focus-on-click - keep matched applicants visible in main list but greyed out and non-interactive - wire blacklist subscription into evaluator provider and derive matches at runtime without mutating applicant docs - handle blacklist fetch/subscription failures as non-fatal to keep evaluator usable - add accordion UI dependency updates (radix-ui) and lockfile changes
455fc11 to
4a97ac5
Compare
|
Visit the preview URL for this PR (updated for commit 4a97ac5): https://dev-nwplus-admin--pr114-29096700286-geppn7eo.web.app (expires Mon, 20 Jul 2026 13:37:41 GMT) 🔥 via Firebase Hosting GitHub Action 🌎 Sign: c290bf9e2fac0401389f751f415cce4267517b51 |
|
@jasperjjhe thx for changing the branch - could you please add the small chip I requested in the above comment? It would be clearer for other users to know why they can't click on a blacklisted applicant in the normal list 🙏 |
Summary
This PR adds a client-side blacklist auto-scan flow to Evaluator. Applicants are matched against a global Firestore blacklist in real time, surfaced in a dedicated sidebar section, and disabled in the main applicant list without mutating applicant records.
Scope Implemented
toLowerCase().trim()).Firestore Data Model
The implemented read path is:
Hackathons/blacklist/entriesHackthons/blacklistis a document path shape so we must add a sub-collectionEach entry document supports:
email(required for matching)firstNamelastNamenotes(optional)Note: Since Firestore is schemaless, we cannot inherently enforce fixed columns or required fields. We could add Firestore security rules for this. It's usually done on app-side but since this is expected to be a manual thing within Firestore we can consider adding a security rule.
Behaviour Details
entriesupdated.entriesthefirstNameandlastNameare never used. Should this be intended?Files Updated
types.tsblacklist.tsblacklist-section.tsxapplicant-entry.tsxapplicant-list.tsxevaluator-provider.tsxaccordion.tsxpackage.jsonpnpm-lock.yamlFirestore Rules / Environment Changes
Hackathons/blacklistthenentriessub-collection; needs to be applied to Prod Firestore before rollout./Hackathons/blacklist/entries/{entryId}Missing or insufficient permissions.Testing / Verification