Add in-app camera business-card intake (#7) (v0.1.0:100)
A mobile, in-app twin of the Matrix business-card flow (M3): photograph a card in the app and it becomes a reviewed fundraising-grid add/note, with a human approving every write. Server — POST /api/intake/card (authenticated member+, read-only): lazily imports the bot's nio-free parse + spark core, vision-transcribes the photo (local VL via Spark Control — nothing to Claude), runs the same email/phone/ LinkedIn integrity rule + fuzzy matcher, and returns a proposal plus exact match / fuzzy candidates. No write happens here. Frontend — a camera button in the mobile top bar (left of the quick-log pencil) → take or pick a photo → <canvas> downscale to JPEG (also normalizes iPhone HEIC) → the endpoint → an editable review sheet (proposal fields + existing-investor picker). Save reuses /api/fundraising/log-communication tagged source="app_card". No schema change, no migration, no new dependency, no Matrix-bot change. The camera/canvas/OCR path is on-device-only (jsdom has no canvas); covered by test_intake_card.py (stubbed vision+parse) + the render/mount smokes.
This commit is contained in:
@@ -0,0 +1,22 @@
|
||||
import { VersionInfo } from '@start9labs/start-sdk'
|
||||
|
||||
// In-app business-card intake (#7) — a mobile, in-app twin of the Matrix card flow (M3):
|
||||
// - Server: POST /api/intake/card (authenticated member+, read-only) lazily imports the bot's
|
||||
// nio-free parse + spark core, vision-transcribes the photo (local VL via Spark Control —
|
||||
// nothing to Claude), runs the same email/phone/LinkedIn integrity rule + fuzzy matcher, and
|
||||
// returns a proposal + match/candidates. Nothing is written here.
|
||||
// - Frontend: a camera button in the mobile top bar (left of the quick-log pencil) → take/pick a
|
||||
// photo → <canvas> downscale to JPEG (also normalizes iPhone HEIC) → the endpoint → an editable
|
||||
// review sheet. Save reuses log-communication tagged source="app_card"; a human approves.
|
||||
// No schema change — no migration. No new dependency.
|
||||
export const v_0_1_0_100 = VersionInfo.of({
|
||||
version: '0.1.0:100',
|
||||
releaseNotes: {
|
||||
en_US: [
|
||||
'In-app business-card scanning: tap the camera in the mobile top bar to photograph a card,',
|
||||
'review the auto-filled name / email / title / phone / city, attach it to an existing investor',
|
||||
'or add a new one, and save — the same on-box card reader the Matrix bot uses, now in the app.',
|
||||
].join(' '),
|
||||
},
|
||||
migrations: { up: async () => {}, down: async () => {} },
|
||||
})
|
||||
Reference in New Issue
Block a user