About the project
## Inspiration
We kept hitting the same wall with AI agents. Every new one starts from zero, or it grabs everything. Neither asks per field. Neither leaves a trace.
Job hunting made the stakes obvious. You want an agent to apply for you, but not to broadcast your current salary or tell recruiters where you work right now. That one field, in the wrong hands, costs you leverage or your job.
In 2026 the labs proved half the fix. Anthropic shipped memory import and called it number portability. The MCP auth spec standardized scoped, just-in-time consent for agents. Google's AP2 made an agent prove a human authorized a payment. Identity, portability, payment-consent. All shipped. The part still missing is consent for your context. Egoist's AI Passport models that, so we asked one question: where is it used best?
## What it does
Juno is an agent that applies to jobs for you. To brief a hiring team it wants four things: your skills, your work history, your target role, and your current salary.
Without a passport it either re-asks your whole CV every time, or it slurps the lot: salary, current employer, date of birth, references. Then it sends all of that to eight recruiters, with no receipt and no heads-up.
With the passport, Juno requests four fields, says why, and sets how long. You approve three and deny profile.current_salary. It applies on three fields, not four. It proposes one memory update ("open to remote, not relocation") and you decide. Every read and write becomes a signed receipt you can verify and revoke.
Same screen, both sides. The deny is the demo.
## How we built it
Next.js 15 on Vercel, TypeScript, Mantine for the UI. One shared contract file is the source of truth for the request shape: read[], purpose, duration. The passport layer is mocked. An in-memory store holds the data; grants and receipts are mock-signed, Ed25519/DSSE-style. So the flow is real even without a live Egoist API. The data model is field-generic, and the recruiting case is one seeding of it.
Three surfaces carry it: a per-field approval gate, a split-screen that shows both outcomes at rest, and a receipt that reads like an audit line. App, field, purpose, duration, timestamp, signature, plus verify and revoke.
We ran it as a small agent team. A lead, a frontend, a backend, each in its own branch through a review gate, talking over a message relay.
## Challenges we ran into
Staying on-model. Our first cut invented spend caps and payments, which is a different product. We threw it out and rebuilt against Egoist's real grammar: fields, purpose, duration, propose-write, receipt. We also dropped the first demo, a stylist, once we saw the consent moment needs a field that actually hurts to leak.
Then the polish fought back. The first UI read as generic, so we did a de-slop pass and rebuilt the whole surface in Mantine: real type, one semantic color system, no gradients, no emoji. Deploy had teeth too. Vercel flagged the Next.js version as vulnerable, so we bumped and rebuilt, and a bot-challenge briefly hid the public URL until we sorted the project settings.
Built With
- ai
- code
- dsse
- ed25519
- egoist
- fira
- in-memory-store
- mantine
- mcp
- next.js
- passport
- pnpm
- react
- sans
- typescript
- vercel
Log in or sign up for Devpost to join the conversation.