# Agent instructions: DDNYC Contact Card Kit

## Objective

Generate two deployable artifacts from one JSON configuration:

1. `dist/contact.vcf`, a vCard 3.0 contact file.
2. `dist/share-card.png`, a 1290×2796 portrait QR card.

The QR must decode to the exact HTTPS value in `publicVcfUrl`. The recipient's phone controls the final address-book save.

## Fast path

```sh
npm install
cp config.example.json config.json
# Edit config.json and optionally add a square profile image.
npm run generate
npm test
```

Upload `dist/contact.vcf` to the exact `publicVcfUrl`, then test `dist/share-card.png` on an iPhone and Android device.

## Machine-readable contract

- Configuration schema: `config.schema.json`
- Example input: `config.example.json`
- Generator: `generate.mjs`
- Automated validation: `test.mjs`
- License: `LICENSE`
- Commercial guidance: `COMMERCIAL-USE.md`

## Required invariants

- Use vCard 3.0 and CRLF delimiters.
- Keep every physical vCard line at or below 75 UTF-8 bytes; continuation lines begin with one space.
- Keep the QR destination HTTPS and equal to `publicVcfUrl`.
- Do not silently collect, submit or persist configuration data.
- Do not promise silent address-book insertion. The recipient must tap and confirm.
- Preserve a quiet zone around the QR and use high error correction.
- Supply both `url` and `username` for each social profile. Treat social-profile and contact-photo import as best effort; core portable fields are name, organization, title, phone, email and website.
- Test the final hosted URL before printing or distributing the card.

## Safe modification policy

Agents may change copy, colors, layout, configuration fields and output names. If changing the QR payload, vCard serialization or image dimensions, update `test.mjs` and preserve the invariants above.

Do not ship the example identity or another person's PFP. Do not use Anthem Hayek Blanchard, Doginal Dogs or DDNYC branding to imply endorsement of a derivative product.
