Inspiration
Kenyan creatives (photographers, illustrators, producers, designers) increasingly get paid through PayPal. But a payment can be held or an account limited, and PayPal then asks for proof of the work. Most freelancers have that proof scattered across WhatsApp chats, phone galleries and old laptops. CRAFT (Creators' Records, Assurance, Funds & Trust) is built so that getting paid and proving the work happen in the same place. [Add one real example or personal story here.]
What it does
- Bill: create a project and send a real PayPal invoice. A PayPal webhook marks it funded when the client pays.
- Evidence Vault: private uploads, each hashed with SHA-256 and stamped with a server time. Downloads use short-lived signed links, and completeness is scored in code, not by the model.
- Freeze Shield: paste a PayPal limitation notice. CRAFT maps each request to vault files, drafts a cover letter that cites only real filenames and hashes, and a fail-closed verifier blocks any fabricated claim. You approve it, then CRAFT builds a PDF pack.
- Delivery and trust: deliver the final file, get a Work Proof Token (a SHA-256 certificate), and share a one-click client confirm link. A public trust page with a scan-to-verify QR code shows only what you choose to share.
- Onboarding: verified link ownership via GitHub, YouTube or RSS challenge codes. We claim link ownership, never verified identity.
- Money: an income stability and trust score (explicitly not a credit score), cash-flow forecast, payment splits for tax, savings and expenses, and an educational investing range with no promised returns. All calculations are in deterministic code.
- Rehema: a scripted in-app guide that explains each room.
How I built it
Next.js (App Router, TypeScript strict), Tailwind and shadcn/ui, AG Grid, Auth.js, PostgreSQL with pgvector via Drizzle, PayPal REST API (Invoicing and webhooks, sandbox), pdf-lib, deployed on Fly.io with a persistent vault volume. AI is used for reading uploaded files, auditing evidence gaps, matching deliverables to the brief, drafting Freeze Shield letters, drafting profiles and embeddings: [MODEL NAME(S) from your Fly secrets]. The design rule throughout: the model never calculates money and never invents evidence. Every AI claim is checked against stored records, and the check fails closed.
Challenges
- PayPal Invoicing is often unavailable on Kenya-based accounts, including sandbox. I used a US sandbox business account as the merchant while keeping the Kenyan creative as the workspace user.
- Making AI useful without letting it fabricate. The verifier blocks any cited file or hash that isn't in the vault, and an 18-case labelled eval suite checks it.
- Being honest about what a hash and timestamp prove (provenance, not identity).
- Handling one currency per account in the Money view.
What I learned
Building CRAFT taught me that in a money product, AI should explain and never decide. Keeping calculations in deterministic code and making the verifier fail closed meant no fabricated file or hash could slip into a PayPal response. I also learned how much of payments is handling edge cases: idempotent webhooks, and PayPal Invoicing limits on Kenya-based accounts. Most of all, I learned to say only what the system can prove. A hash and a timestamp show provenance, not identity, and being honest about that makes the product more trustworthy.
What's next
Live PayPal keys, M-Pesa rails, live limitation-notice intake, an AI explain layer over the Money numbers.
Built with
Next.js, TypeScript, PostgreSQL/pgvector, Drizzle, PayPal REST API, AG Grid, Fly.io, [model/API], Cursor
Built With
- cursor
- fly.io
- next.js
- postgresql
- typescript