The Presence Gate — When the Card Becomes the Session
One-Line Pitch
Authentication that watches, teaches, and forgives — built from physical card presence on a reader, not passwords in a database.
The Spark

Every authentication system on the internet works the same way. You prove who you are once — password, fingerprint, magic link — and the system gives you a token. That token floats around in a cookie or a header, and as long as it exists, you're in. Remove the human, the token keeps working. Copy the token to another machine, it works there too. The human is incidental after the initial proof.
We had a different constraint. We had NFC cards. Physical, minted, version-tracked DESFire cards that sit on a reader connected to a Raspberry Pi. And we asked a question the internet never had to ask:
What if the card has to stay on the reader?
Not "tap and forget." Not "scan and go." Stay. The card's physical, continuous presence on the reader is the session. Remove the card, the session degrades. Swap it for an older card, the system notices, explains what's wrong, and waits — patiently — for you to put the right one back.
How It Works

The Physical Layer
A Raspberry Pi sits on a local network with an ACR122U NFC reader connected via USB. When an NFC card touches the reader, the Pi detects it within milliseconds. When the card leaves, it knows within seconds. This isn't polling a database — it's electromagnetic coupling. The card is either physically there or it isn't. There is no ambiguity.
The Pi maintains a sovereign WebSocket to the cloud server — an outbound connection that punches through NAT without port forwarding, without VPNs, without any firewall configuration. The card events flow upstream in real time.
┌─────────────────┐ ┌──────────────────────┐
│ NFC Reader │ USB │ Raspberry Pi │
│ (ACR122U) │◄────────────►│ (GoW Node) │
│ │ │ │
│ Card present? │ │ • Detects tap/remove │
│ Card removed? │ │ • Identifies card │
│ EM coupling │ │ • Reports upstream │
└─────────────────┘ └───────┬───────────────┘
│ Sovereign
│ WebSocket
│ (outbound)
▼
┌──────────────────────┐
│ Cloud Server │
│ (KronosWater VPS) │
│ │
│ • Presence tracking │
│ • Version chain │
│ • Policy evaluation │
│ • Denial generation │
└──────────────────────┘
The Identity Chain
Every Kronos NFC card is a DESFire EV2 chip — the same chip in transit cards and building access worldwide. But ours carry more than an ID. Each card knows:
| Field | What It Means |
|---|---|
| KronosID | The person. Survives card replacement. |
| Card UID | The physical chip. Unique, hardware-burned. |
| Version | The card format (V1, V2, ...). Tracks schema evolution. |
| Iteration | Which card in the chain (1st, 2nd, 3rd minted). |
| Previous Card UID | The card this one replaced. Creates a provable chain. |
| Status | active, superseded, or revoked. |
When a new card is minted, the old card's status changes to superseded. The chain is preserved — V1 links to V2 links to V3. The identity is the person. The card is the proof. The chain is the audit trail.
The Presence Model
Here's where it diverges from everything on the internet.
Traditional auth has one concept: authenticated or not. You're logged in or you're logged out. The Presence Gate has four:
| Mode | What It Means | Timeout |
|---|---|---|
| Continuous | Card must be on the reader right now. Leave, and access degrades within minutes. | ~10 min window |
| Recent | Card was on the reader recently. You can walk away, but not for long. | Configurable (10min – 24h) |
| Session | Card was seen within a session window. Multi-day persistence. | Up to 7 days |
| Any | Card was seen at some point. The lightest touch. | No expiry |
Different sites declare different requirements. The high-security command surface (the Bridge) requires recent presence with the latest card. A public-facing dashboard might accept any card version seen in the last week.
This is not a binary lock — it's a security gradient. The same identity, the same infrastructure, but the required proof scales with the sensitivity of what's behind the door.
The Smart Denial

This is the part the internet hasn't figured out.
When you scan a card that doesn't meet a site's policy, most systems would say: "Access denied." Maybe a 403. Maybe a red banner. The human is left to guess what went wrong.
The Presence Gate does something different. It returns a structured denial — a machine-readable, human-displayable document that tells you:
- What was detected — "V1 card, iteration 1, status: superseded"
- What was required — "Latest card (V2, iteration 2), recent presence"
- What to do about it — "Swap your card on the reader"
- What this card still works for — "Opinions, Fleet Dashboard"
And then it waits.
┌─────────────────────────────────────────────────────┐
│ │
│ ◆ Card Upgrade Required │
│ │
│ Your V1 card is on the reader, but the Bridge │
│ requires your latest card (V2). │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ ON READER │ → │ REQUIRED │ │
│ │ V1 │ │ V2 │ │
│ │ Superseded │ │ Active │ │
│ └─────────────┘ └─────────────┘ │
│ │
│ V1 was superseded when V2 was minted. │
│ │
│ ┌───────────────────────────────────────┐ │
│ │ Your card still works for: │ │
│ │ ┌──────────┐ ┌────────────────┐ │ │
│ │ │ Opinions │ │ Fleet Dashboard│ │ │
│ │ └──────────┘ └────────────────┘ │ │
│ └───────────────────────────────────────┘ │
│ │
│ ● Swap your card — this page will advance │
│ automatically │
│ │
└─────────────────────────────────────────────────────┘
The page polls silently. The moment the right card touches the reader, the Pi detects it, the server evaluates the policy, issues a grant, and the denial page dissolves into the dashboard. No refresh. No retry button. No error codes to Google. The human corrects the physical situation, and the digital world responds.
Why This Is Different From Everything Else

vs. Passwords
Passwords are knowledge-based. If someone knows the password, they're in. If they forget it, they're out. The Presence Gate is possession-based — you need the physical card. But unlike a static token, the system knows which card, which version, and whether it's currently the latest in the chain.
vs. FIDO2 / Passkeys
FIDO2 is clever — public-key crypto on a hardware token. But it's still tap-and-forget. Once the challenge-response completes, the session floats free. The Presence Gate maintains awareness of whether the card is still there. Continuous presence is a dimension FIDO2 doesn't have.
vs. Smart Card Login (PIV/CAC)
Government smart card systems (PIV, CAC) do require the card to remain inserted. But they have no concept of card versioning, no graceful degradation, no smart denial. Pull the card, the screen locks. There's no "your card still works for these three things." It's binary.
vs. OAuth / SSO
OAuth is a delegation framework — "I trust Google to vouch for you." The vouching happens once, then tokens replicate. The Presence Gate doesn't delegate. The proof is direct, physical, and continuous. There is no intermediate authority.
| Feature | Password | FIDO2 | PIV/CAC | OAuth | Presence Gate |
|---|---|---|---|---|---|
| Proof type | Knowledge | Possession (tap) | Possession (insert) | Delegation | Possession (continuous) |
| Card versioning | — | — | — | — | ✓ |
| Graceful degradation | — | — | — | — | ✓ |
| Smart denial | — | — | — | — | ✓ |
| "Still valid for" | — | — | — | — | ✓ |
| Auto-advance on fix | — | — | — | — | ✓ |
| Presence modes | — | — | Binary | — | 4-level gradient |
| Chain of custody | — | — | — | — | ✓ (linked card UIDs) |
The Security Gradient

Different things deserve different levels of proof. A public dashboard doesn't need the same assurance as a command surface that controls live infrastructure. The Presence Gate encodes this as a policy per site:
┌─────────────────────────────────────────────────────────────┐
│ SECURITY GRADIENT │
│ │
│ HIGH ──────────────────────────────────────────── LOW │
│ │
│ Bridge Opinions Fleet Dashboard │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ Latest │ │ Any │ │ Any │ │
│ │ card │ │ card │ │ card │ │
│ │ Recent │ │ version │ │ version │ │
│ │ (10min) │ │ Recent │ │ Session │ │
│ │ │ │ (24h) │ │ (7 days)│ │
│ └─────────┘ └─────────┘ └─────────┘ │
│ │
│ Command Read-only Monitoring │
│ surface content dashboard │
└─────────────────────────────────────────────────────────────┘
The same V1 card that gets denied at the Bridge walks straight into Opinions. The denial page tells you this. It's not a punishment — it's a map. The system acknowledges what the card can still do, even as it explains what it can't.
What Exists Now

This is not a concept document. The Presence Gate is live.
- Physical layer: Raspberry Pi + ACR122U reader, sovereign WebSocket to cloud, tap/remove detection in real time
- Card chain: Two cards minted (V1 superseded, V2 active), full UID chain linking V2 back to V1
- Presence tracking: In-memory store tracking card-on-reader state per user, per node, with heartbeat and timeout
- Policy engine: Three site policies defined (Bridge, Opinions, Fleet), evaluates version + presence + freshness
- Smart denial: Structured JSON denial with detected/required comparison, action hints, still-valid-for list
- Frontend: Full denial overlay on the Bridge — amber warning UI, V1→V2 comparison boxes, "your card still works for" badges, pulse animation, auto-advance polling when the right card lands
- Auto-advance: Denial page polls every 2 seconds. The moment the right card appears, the page dissolves and the dashboard loads. No human action needed beyond the physical card swap.
The Philosophical Point

The internet has spent twenty-five years trying to prove identity digitally. Passwords, certificates, biometrics, zero-knowledge proofs — all trying to answer the question "are you who you say you are?" without the human being physically present.
The Presence Gate asks a different question: "Are you still here?"
Not once, at login. Continuously. The physical card on the reader is an ongoing assertion of presence. It can't be replayed. It can't be phished. It can't be stolen in a breach. It's electromagnetic coupling between a chip and an antenna, happening right now, in a specific physical location. The card is either on the reader or it isn't. The human is either at the desk or they aren't. The answer is always fresh.
The internet's auth problem isn't a cryptography problem. It's a presence problem. And you can't solve a presence problem without something that's physically present.
Next Step
More cards get minted. More sites get policies. The gradient grows. Every Kronos-connected service declares what level of proof it needs, and the Presence Gate evaluates in real time whether the card on the reader — right now, this second — meets the bar.
The card doesn't just get you in. It keeps you in. And when it can't, it tells you why, shows you what to do, and waits with you until you're ready.